我正在尝试从我的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];
}
任何帮助?
答案 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中创建的实例)。