iOS委托不能使用performSegueWithIdentifier?
我有两个控制器(第一,第二)在故事板,xcode 4.2。
第一个控制器有一个tableview并embedded导航控制器。 第二个控制器也有一个桌面视图,并embedded导航控制器(不同于第一个)
在first.h中:
#import "second.h" ... @interface first : UIViewController <secondDelegate, UITableViewDelegate, UITableViewDataSource> ...
在first.m:
- (IBAction)add:(id)sender // action when tapped a button on topbar { [self performSegueWithIdentifier:@"addSegue" sender:sender]; } .... - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if([[segue identifier] isEqualToString:@"addSegue"]) { NSLog(@"delegated"); second *controller=[segue destinationViewController]; controller.delegate=self; } } - (void)callback { NSLog(@"Callback here"); }
Segue是默认转换的模态。
second.h:
@protocol secondDelegate -(void)callback; @end .... id <secondDelegate> delegate; @property (nonatomic,assign) id <secondDelegate> delegate;
second.m:
... (button of topbar tapped action) ... [self dismissModalViewControllerAnimated:YES]; NSLog(@"class: %@",[self delegate]); [[self delegate]entryGroupDoneButtonTapped];
概要:
我没有看到“callback这里”的消息,但我有一个“委托”消息。 “class:”debugging行打印“null”。
为什么?
(我可以发送任何数据从第一到第二,只有代表的callback不起作用)
我find了一个解决scheme: destinationViewController
返回一个UInavigationController
,所以我们可以使用: AddDrinkViewController *controller=[[[segue destinationViewController]viewControllers]objectAtIndex:0];