自定义 UIStoryboardSegue

本文介绍了一种使用Segue简化ViewController间跳转逻辑的方法,特别适用于处理大量Menu条目的应用。通过这种方式,开发者可以清晰地组织代码,提高应用的可维护性和扩展性。此外,文章还讨论了Storyboard和Segue的优缺点,并提供了如何在实际项目中应用的指导。

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

举个例子: 

比如我在现在很流行的这种侧边栏是Menu的交互情况下 
side_panel_demo_0 
现在的需求就是点左边Menu里面对应的条目可以跳转到相应的ViewController

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 如果不用的话, 新建MenuViewController.h 和.m
// 然后在 MenuViewController.m 里面分开写逻辑
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIViewController *destinationViewController;
    switch (indexPath.row) {
        case 0:
            // Selected Home
            destinationViewController = [[MainViewController alloc] init];
            break;
        case 1:
            // Selected Setting
            destinationViewController = [[SettingViewController alloc] init];
            break;
        default:
            NSLog(@"error");
            break;
    }
    self.sidePanelController.centerPanel = destinationViewController;
}
1
2
3
4
5
6
7
// 如果用的话根本就不需要 MenuViewController 这个类!!
// 只需要在自己定义的CustomSegue里面处理跳转的逻辑就好了
- (void)perform {
    UIViewController *vc = self.sourceViewController;
    vc.sidePanelController.centerPanel = self.destinationViewController;
}
// 剩下的你只需要在界面上按住Control拖几条线出来就可以了

优点

这个方式的优点就是逻辑结构很清晰, 特别是如果你的Menu很多的时候, 你要写一大堆跳转的逻辑, 但是你用Segue的方式来实现的话, 只需要上面的两行代码, 以后每增加一个Menu的话, 只需要在界面上新建一个cell, 然后拖到相应的目的ViewController上面选择自定义的Segue就好了

结尾

最后的结果如下图:
side_panel_demo_1
同样的, 其实在很多地方都可以用Segue(无论是自定义的还是用SDK本身的)来简化代码, 使逻辑清晰化, 这里只是一个比较实际的案例而已 

当然自己添加的UIStrotboard,需要对其来控制的话,只需要在UIStoryBoard的右面属性框Custom Class属性中键入自己新建的ViewController。

但是Segue也有自己的缺点:prepareForSegue是使用segue时唯一传递参数的办法。Storyboard不支持自定义的viewcontroller指定属性和delegate。

所以我建议,如果你写的应用比较简单,规模不大(视图什么的都不多),可以使用storyboard,会很方便。但是如果你要写的程序非常庞大,复杂。有很多很多视图,很多导航,很多后退,那么用storyboard会非常费劲。

另外,我觉得storyboard可以用于建立初始模型,你可以最初设计的时候用storyboard建立一个真正成型后的效果应用。

所以用storyboard主要是取决于你要的应用情况。

如果你用SVN/Git或者其他的VCS了,那么Storyboard和他们完全不匹配。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值