2011-12-13 128 views
3

我在故事板中有兩個控制器(第一個,第二個),xcode 4.2。iOS委託不與performSegueWithIdentifier一起使用?

第一個控制器有一個tableview並嵌入導航控制器。 第二控制器具有的tableview太和嵌入在導航控制器(未與第一)

在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]; 

摘要:

我沒有看到 「回調這裏」 的消息,但我有一個「委託」消息。 「class:」調試行打印「null」。

爲什麼?

(我可以先發送任何數據到第二本,只有委託的回調不工作)

+2

解決:我找到了一個解決方案:destinationViewController返回一個UI導航控制器,所以我們可以使用:AddDrinkViewController * controller = [[[segue destinationViewController] viewControllers] objectAtIndex:0]; – mudlee

+0

你能用你的解決方案回答你的問題嗎? :-) – 2012-04-10 14:40:43

回答

5

我找到了一個解決方案:destinationViewController返回UInavigationController,所以我們可以使用:AddDrinkViewController *controller=[[[segue destinationViewController]viewControllers]objectAtIndex:0];