委托不会从另一个viewcontroller调用,尝试了一切

时间:2013-10-20 14:32:43

标签: iphone ios objective-c delegates viewcontroller

我有2个viewcontrollers,它们之间有一个segue。我的主视图控制器称为ViewController。在我的第二个名为PreferencesViewController的viewcontroller中,我有一个按钮,必须在我的主ViewController中更改一些值。但它没有......

我在我的PreferencesViewController.h中设置了一个委托协议,就像我在Stack Overflow上的几个例子中看到的那样(是的,我确实谷歌了;))。

我还将PreferencesViewController.h文件导入到我的主ViewController中,并且我告诉viewcontroller是委托人:<PreferencesViewControllerDelegate>

我还在我的主ViewController实现中实现了该方法。但是当我按下按钮时,不会调用此方法。我在我的IBAction中实施了[self.delegate methodExample];

我已经阅读了很多关于设置委托的内容。我在哪里需要这样做?我是否需要创建和分配/初始化PreferenceViewController的实例?我尝试了这个,然后告诉实例instance.delegate = self,但这也不起作用......

希望有人可以帮助我!

1 个答案:

答案 0 :(得分:1)

你是否需要设置委托是正确的。使用segues时最简单的方法是使用他ViewController方法在源视图控制器(本例中为prepareForSegue:sender:)中。传递给此方法的segue对象具有对目标视图控制器的引用;你可能想做类似的事情:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"Your preferences segue identifier"]) {
        PreferencesViewController *preferencesViewController = 
segue.destinationViewController;
        preferencesViewController.delegate = self;
    }
}

由于您正在使用segues,系统正在为您执行新视图控制器的alloc / init;系统调用此方法,以便在显示新视图控制器之前对其进行任何连接。