六步完成跳转Delegate方法

转载自:http://www.dasheyin.com/liu_bu_wan_cheng_tiao_zhuan_delegate_fang_fa.html


在教程《iOS开发教程:Storyboard全解析-第二部分》中,我讲解了如何使用iOS中的delegate,但是有人写信觉得步骤不是很清楚,所以我在这里单独写一个清晰版的。

这个教程就是单独分出来,讲解如何做一个delegate+segue的跳转方法的,步骤如下:

 

第一步,从起始的控件做一条联线(segue)到目标场景。

如图

 

六步完成跳转Delegate方法_第1张图片

 
第二步,将这个联线制定一个独特的Identifier。

 

单机这个segue,在右边的inspector里面修改。
第三步,为目标场景制作一个代理(delegate)方法。

 

首先,在第二个场景(目标场景)的M文件中加入下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#import <UIKit/UIKit.h>

 

@class secondViewController;

 

@protocol SecondViewControllerDelegate <NSObject>

- (void)secondViewControllerDidJump: (secondViewController *)controller;

 

@end

 

@interface secondViewController : UITableViewController

 

@property (strong,nonatomic) NSArray *choices;

@property (nonatomic, weak) id <SecondViewControllerDelegate> delegate;

 

- (IBAction)jump:(id)sender;

 

@end

 

这些代码制作并声明了了一个代理,还声明了一个IBAction用来进行delegate的跳转。
第四步,在Cancel和Done按钮,以及所有其他你需要和原始场景交流的地方调用代理方法。

 

将下列代码加入第二个场景的M文件中。

 

1
2
3
4
5
6
7
8
9
10
- (IBAction)jump:(id)sender

{

[self.delegate secondViewControllerDidJump:self];

}

这将按下按钮的动作转向了代理方法。

之后在Storyboard中,用连线的方法连接按钮和IBAction,如图:

 

六步完成跳转Delegate方法_第2张图片

 

第五步,在原始场景执行代理方法,这将会在用户按下按钮后关闭场景。

 

将下面的代码加入到第一个场景(原始场景)的M文件中。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
- (void)secondViewControllerDidCancel:

(secondViewController *)controller

{

[self dismissViewControllerAnimated:YES completion:nil];

}

 

这段代码是真正关闭第二个场景的代码,这是iOS5的新方法。

然后,在第一个场景的H文件中,把改ViewController声明为遵循我们创建的代理协议

1
@interface delegateViewController : UIViewController<SecondViewControllerDelegate>

 

第六步,在原始场景执行prepareForSegue方法。

 

在第一个场景的M文件中加入下面的代码,这些代码真正的将第二个场景会转到第一个场景。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
- (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;

}

}

 

 

最后的效果是这样的:

 

六步完成跳转Delegate方法_第3张图片

 

请注意,要让上面的代码发挥作用你的storyboard必须是这样的:

 

六步完成跳转Delegate方法_第4张图片


你可能感兴趣的:(六步完成跳转Delegate方法)