本文共 1936 字,大约阅读时间需要 6 分钟。
转载自:http://www.dasheyin.com/liu_bu_wan_cheng_tiao_zhuan_delegate_fang_fa.html
在教程《》中,我讲解了如何使用iOS中的delegate,但是有人写信觉得步骤不是很清楚,所以我在这里单独写一个清晰版的。
这个教程就是单独分出来,讲解如何做一个delegate+segue的跳转方法的,步骤如下:
第一步,从起始的控件做一条联线(segue)到目标场景。
如图
第二步,将这个联线制定一个独特的Identifier。
单机这个segue,在右边的inspector里面修改。
第三步,为目标场景制作一个代理(delegate)方法。
首先,在第二个场景(目标场景)的M文件中加入下面的代码
#import@class secondViewController; @protocol SecondViewControllerDelegate - (void)secondViewControllerDidJump: (secondViewController *)controller; @end @interface secondViewController : UITableViewController @property (strong,nonatomic) NSArray *choices;@property (nonatomic, weak) id delegate; - (IBAction)jump:(id)sender; @end
这些代码制作并声明了了一个代理,还声明了一个IBAction用来进行delegate的跳转。
第四步,在Cancel和Done按钮,以及所有其他你需要和原始场景交流的地方调用代理方法。
将下列代码加入第二个场景的M文件中。
- (IBAction)jump:(id)sender{[self.delegate secondViewControllerDidJump:self];}
这将按下按钮的动作转向了代理方法。
之后在Storyboard中,用连线的方法连接按钮和IBAction,如图:
第五步,在原始场景执行代理方法,这将会在用户按下按钮后关闭场景。
将下面的代码加入到第一个场景(原始场景)的M文件中。
- (void)secondViewControllerDidCancel:(secondViewController *)controller{[self dismissViewControllerAnimated:YES completion:nil];}
这段代码是真正关闭第二个场景的代码,这是iOS5的新方法。
然后,在第一个场景的H文件中,把改ViewController声明为遵循我们创建的代理协议
@interface delegateViewController : UIViewController
第六步,在原始场景执行prepareForSegue方法。
在第一个场景的M文件中加入下面的代码,这些代码真正的将第二个场景会转到第一个场景。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{if ([segue.identifier isEqualToString:@"AddPlayer"]){UINavigationController *navigationController =segue.destinationViewController;secondViewController*SecondViewController =[[navigationController viewControllers]objectAtIndex:0];SecondViewController.delegate = self;}}
最后的效果是这样的:
请注意,要让上面的代码发挥作用你的storyboard必须是这样的: