从appdelegate设置UIViewController委托

时间:2014-03-06 17:25:03

标签: ios objective-c uistoryboard appdelegate

我正在尝试从我的app delegate设置视图控制器的委托。 但它不起作用。

AppDelegate.m:

UIStoryboard* sb = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                              bundle:nil];

SFLoginViewController * LoginVC = (SFLoginViewController *)[sb
                                    instantiateViewControllerWithIdentifier:@"Login"];
LoginVC.delegate = self;

SFLoginViewController.m

- (IBAction)Login:(id)sender {

  NSLog(@"%@",self.delegate); //returns nil (!!)

  //It should call the delegate method here
  [[self delegate] LoginSucceeded];

}

任何帮助?

3 个答案:

答案 0 :(得分:4)

为什么不在这样的ViewController中设置你的委托:

self.delegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];

然后,您将能够在AppDelegate中处理委托事件。

答案 1 :(得分:2)

查看instantiateViewControllerWithIdentifier documentation ...

  

讨论您可以使用此方法创建视图控制器对象   你想在你的程序中操作和呈现   应用。在使用此方法检索视图之前   控制器,您必须使用适当的标识符明确标记它   Interface Builder中的字符串。

     

此方法创建指定视图控制器的新实例   每次你打电话。

我认为你的appDelegate中的代码不会返回通过故事板呈现的ViewController

答案 2 :(得分:0)

通过这样做

  

(SFLoginViewController *)[sb instantiateViewControllerWithIdentifier:@“Login”];

您正在创建一个新的SFLoginViewController实例。

我假设你已经有了一个从storyboard创建的viewcontroller实例。 来自storyboad的实例是调用其方法login:(id)sender而不是您为该委托分配的那个。

尝试@ hw731答案,或者您需要将委托添加到从故事板创建的实例(而不是您在appdelegate中创建的实例)。