将变量传递给父视图?

Posted

技术标签:

【中文标题】将变量传递给父视图?【英文标题】:Pass Variables to Parent View? 【发布时间】:2012-02-24 00:17:56 【问题描述】:

我有一个 UITableViewController 推送一个 UIViewController,我需要将两个 NSDates 和一个 BOOL 从该子视图控制器传递回表视图控制器。

我怎么能这样做?如果我不清楚或者您需要更多解释,请告诉我。

如果有任何帮助,我将不胜感激,谢谢。

【问题讨论】:

您应该发布您的具体问题。 SO 不是进行民意调查的合适场所,如果您知道这个问题已经存在重复,那么您需要具体说明什么需要提出新问题。 我确实明确了我的问题以及我需要的东西。正如我提到的,我需要传递一些变量,两个 NSDates 和一个从推送的 UIViewController 到其父 UITableViewController 的 BOOL。然后我简单地继续解释,基本上,请不要因为已经有很多这样的问题而被束缚,所以我说“如果”你觉得已经有一个有价值的答案,让我知道你的感受那是正确的方法(而不是重写它),然后我将详细说明我如何无法使该解决方案发挥作用。原谅我,我不打算让这成为民意调查。 委托设计模式是这种情况下的正确策略。 好吧,让我改变一下我的问题,因为人们似乎对我的问题反应不佳。 请问为什么我收到这么多反对票? 【参考方案1】:

使用委托是将信息从一个控制器传递到另一个控制器的正确方法。

通常,您要做的是在 UITableViewController 标头中声明一个协议,实现它,然后使用委托初始化 UIViewController

简而言之,您的UITableViewController .h 文件应该是这样的:

@protocol setDateDelegate <NSObject>
@required
- (void) setDateOne:(NSDate *)one dateTwo:(NSDate *)two;
@end

然后,您应该实现上述类,对UITableViewController .m 文件中的日期做任何您想做的事情。

在您的 UIViewController 中,您可以(最后替代)定义一个自定义 init 方法:

首先,在您的 .h 中定义一个委托属性和一个自定义 init 方法,然后在您的 .m 中实现它,如下所示:

- (id)initWithDelegate:(NSObject *)myDelegate


    self = [super init];
    if (self) 
        self.delegate = myDelegate;
    
    return self;

接下来,当您需要将日期传递给您的 UITableViewController 时,只需使用 [self.delegate setDateOne:one dateTwo:two];

有更多的方法可以做到这一点,包括跳过自定义的 init 方法并在创建 UIViewController 后设置委托:

MyUIViewController *viewController = [[[MyUIViewController alloc] init] autorelease];
viewController.delegate = self;
...

这更像是个人喜好的风格。

我可能弄乱了代码(并且忘记了一些代码),因为我是在头脑中写下这个,但它应该足以让你开始。

【讨论】:

感谢您的回复。立即出现问题,尝试设置视图控制器(子)委托没有发生,因为它没有委托属性,这可能是什么原因? 没有固有的委托供您使用,您必须自己制作一个作为子视图控制器的属性。

以上是关于将变量传递给父视图?的主要内容,如果未能解决你的问题,请参考以下文章

将值/变量从 fancybox iframe 传递给父级

UITableView - 如何将触摸传递给父视图

将属性从模态视图控制器传递给父级

将触摸事件传递给父视图

怎样向父页面script传递变量

将变量从视图传递到视图 codeigniter