六步完成跳转Delegate方法

本文详细介绍了如何在iOS开发中利用Delegate和Segue进行页面跳转,包括创建自定义标识符、实现代理方法、在Storyboard中配置联线以及在不同场景间传递数据的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


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

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

 

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

如图

 

 
第二步,将这个联线制定一个独特的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,如图:

 

 

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

 

将下面的代码加入到第一个场景(原始场景)的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;

}

}

 

 

最后的效果是这样的:

 

 

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

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值