iOS委托不使用performSegueWithIdentifier?

时间:2011-12-13 15:07:33

标签: ios xcode delegates segue

我在故事板中有两个控制器(第一个,第二个),xcode 4.2。

第一个控制器有一个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是一个默认过渡的模态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”。

为什么?

(我可以用这个从第一个到第二个发送任何数据,只有委托的回调不起作用)

1 个答案:

答案 0 :(得分:5)

我找到了一个解决方案:destinationViewController返回UInavigationController,因此我们可以使用:AddDrinkViewController *controller=[[[segue destinationViewController]viewControllers]objectAtIndex:0];