`

这几天使用IB的总结

 
阅读更多

这几天尝试了使用Interface Builder,跟以前用纯代码开发还是有比较明显的区别,本文总结一下这几天的感受
<!--more-->

原理

总的来说,在IB里的操作,会在编译时由xcode生成代码,本质上和纯代码是一样的。但是通过IB的方式,可以用更少的代码实现同样的功能

比如说segue,实际上还是会生成pushViewController或者presentViewController的调用。以及各种组件的实例化,也都会生成init的调用等

以下总结一下IB里的各种操作,与代码的对应关系

实例化

在IB里拖出一个UITableViewController,那么xcode会自动创建TableView的实例,并调用相应的init方法。类似的,将一个ViewController嵌套在NavigationController里,xcode也会自动创建这2个实例,并将ViewController设置成rootViewController

纯代码实现:

HomeIndexController *vc = [[HomeIndexController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];

不仅如此,在ViewController的生命周期里,各种loadView,以及View的实例化,也都可以在IB里完成大部分

通过IBOutlet获取引用

IBOutlet解决的是获取引用的问题

比如ViewController需要拿到UILabel和UIButton的引用,纯代码的方式可能是:

@property UILabel *label;

MyView *view = (MyView*)self.view;
UILabel* theLabel = view.label;

而在IB里,只需要从storyboard里拖出一个IBOutlet到ViewController里就可以了

设置各种属性

比如要设置一个UIView可点击,纯代码的方式是:

view.userInteractionEnabled = YES;

或者其他的属性,如backgroundColor等都是类似的,在IB里可以直接设置

设置delegate和dataSource

也可以在IB里直接完成:

通过IBAction设置交互行为

设置target-action也是非常常见的情况,纯代码方式:

[button addTarget:controller action:@selector(backButtonPress) forControlEvents:UIControlEventTouchUpInside];

另外一种是设置手势响应,纯代码方式:

[view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap)]];

这2种情况都可以通过拉出一个IBAction来替代

controller跳转

代码的方式一般是:

[navigationController pushViewController:controller animated: YES];

或者

[controller presentViewController:photoSlider animated:YES completion:nil];

而返回上一个controller,纯代码实现是:

[navigationController popViewControllerAnimated: YES];

或者

[self dismissViewControllerAnimated:NO completion:nil];

这种跳转的场景可以通过segue和unwind segue来替代

缩小IB中controller的面积

controller在IB里会特别大,如果用外接显示器还好,如果是用macbook开发,编辑storyboard的时候会特别吃力

其实可以双击空白区域,会把controller缩小,可视范围就大多了

单元测试特别方便

我手头的版本是xcode7.1.1,这个版本单元测试非常方便,只要继承XCTestCase就可以,点击左侧的小菱形就可以直接跑单元测试,比以前的版本方便很多,可以多写点单元测试了

关于布局和约束的问题

以前我一般是用masonry来写约束,还是比较熟练的。代码类似:

[phoneLabel mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(@10);
            make.top.equalTo(@0);
            make.width.equalTo(@80);
            make.height.equalTo(@50);
        }];

        [_phoneInput mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(phoneLabel.mas_right);
            make.right.equalTo(@-10);
            make.top.equalTo(phoneLabel);
            make.height.equalTo(phoneLabel);
        }];

基本上就是各种init和addSubview之后,开始用masonry来写约束

而在IB里,也是通过拖动的方式来做的,一种做法是在Pin面板里设置,另一种做法是直接在组件上control + drag,还可以在size inspector里编辑。反正挺麻烦的,我现在还不太熟练,基本上还是用masonry的思路在做

IB的缺点

IB最大的优势当然就是节省代码,这是毋庸置疑的。但是IB也有劣势

首先是多人协作开发的时候,虽然xcode已经多次优化过,conflict问题始终不能很完美地解决。毕竟merge代码很容易,要merge XML文件实在是有点困难

其次是我仍然认为代码更加直观,比如一个控件的属性等,在代码里比较集中,而在IB里就要分散到各个地方去找了。有时候出现一些很诡异的问题,比较难定位。比如下面这个问题

UIImageView约束失效的诡异问题

今天我拖出了一个UITableViewController,然后在自定义的cell里放了一个UIImageView,并且设置好了约束。结果我发现这个ImageView老是变形,检查了好几遍约束,始终没发现问题

最后在connections inspector里发现,我不知道什么时候不小心把这个ImageView拖了2个IBOutlet到自定义的Cell类里,于是xcode生成代码的时候就出错了。最后把2个Outlet都删掉,重新拖了一次就好了

像这种问题,真心难发现,如果是纯写代码,就不会发生这种事了

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

    安装IB卡驱动到vsphere

    "安装IB卡驱动到vsphere" IB卡驱动是InfiniBand卡的驱动程序,它是一种高性能的计算机网络接口,常用于高性能计算、数据中心和云计算环境中。vsphere是VMware公司推出的虚拟化平台,用于管理和虚拟化数据中心的...

    FANUC机器人R-30iB系列控制柜使用资料合集.rar

    在使用资料合集中,用户可以找到详细的《R-30iB系列控制柜操作手册》,这份文档详尽地介绍了控制柜的安装、接线、启动和关闭步骤,以及日常维护注意事项。此外,还有《R-30iB控制软件用户指南》,涵盖了系统设置、...

    IB Specification Vol 1-Release-1.4 ib协议2020版本

    它通过使用串行数据传输和通道架构,实现了比传统网络技术更高的性能。IB协议由三部分组成:数据路径层(Data Path Layers)、传输层(Transport Layer)和系统管理(System Management)。 二、2020版本新特性 1....

    iOS基础-使用IB搭建登录界面+手势事件的使用

    本教程将深入讲解如何使用IB来搭建一个登录界面,并结合手势事件来增强用户体验。以下是对这个主题的详细阐述: 一、使用Interface Builder搭建登录界面 1. **启动Interface Builder**: 在Xcode中,选择File &gt; New...

    IB交换机安装手册

    在安装IB交换机时,需要注意以下几点: 4.1、注意交换机的前后面板、正反面(不要安反)。 4.2、插线缆时,不论是铜缆还是光缆,弯折程度不能超过90度。 4.3、插线缆时,一定要插紧。 4.4、安装完成后,通知用户...

    Mellanox IB交换机用户手册

    这对于追踪技术的最新进展和确保使用最新信息进行操作十分必要。 4. **术语表**: 包含了一个术语表,解释了与Mellanox IB交换机相关的专业术语,帮助用户更好地理解和应用其中的概念。 5. **特性概述**: 这一...

    Fanuc四轴机器人R30iB Compact控制装置使用维修说明书

    Fanuc四轴机器人R30iB Compact控制装置使用维修说明书 本说明书提供了Fanuc四轴机器人R30iB Compact控制装置的使用和维修说明,旨在帮助用户正确地使用和维修机器人,以确保安全和高效的生产。 一、机器人安全使用...

    IB(InfiniBand网卡性能测试结果)

    在"IB性能测试结果"这个压缩包文件中,可能包含了以下内容: - **基准测试报告**:使用标准测试工具如iperf、fio等进行的详细测试,展示各项性能指标。 - **吞吐量图表**:对比不同负载下InfiniBand网卡的带宽变化...

    发那科机器人M20IB机构部说明书.PDF

    本资源摘要信息对发那科机器人M20IB机构部的使用说明书进行了详细的介绍,强调了机器人的安全使用和维修的重要性,并对机器人作业人员的定义、安全栅栏内的作业、安全使用须知的定义等内容进行了详细的介绍。

    FANUC机器人__R-30iB_30iB_Plus控制装置 维修说明书(连接篇).pdf

    总的来说,这份维修说明书为FANUC机器人R-30iB和R-30iB Plus控制装置的操作员提供了详尽的指导,涵盖了关键部件的故障排查和维护步骤,旨在确保系统的稳定运行和高效服务。在进行任何维修操作时,都应严格遵守手册中...

    ib_logfile0

    ib_logfile0ib_logfile0ib_logfile0

    Robot series R-30iB/R-30iB Plus 控制装置 维修说明书2019年09月版

    在使用机器人控制装置时,务必注意以下几点: 1. 机器人的外观和规格可能会变更,恕不另行通知。 2. 机器人的出口和再出口可能需要日本国政府的出口许可和美国政府的再出口法的限制。 3. 本说明书中的内容不得以...

    佳能IB4080 IB4000打印机清零软件视频教程佳能打印机维修模式清零方法

    这个过程通常涉及到几个步骤: 1. **下载与安装**:首先,用户需要从可靠的来源下载适合佳能IB4080或IB4000的清零软件。压缩包中的“佳能IB4080 IB4000清零软件视频教程佳能打印机维修模式清零方法.avi”文件即为...

    Robot series R-30iB Mate/R-30iB Mate Plus 控制装置维修说明书201909版

    Robot series R-30iB Mate/R-30iB Mate Plus 控制装置维修说明书201909版 本说明书是关于FANUC Robot series R-30iB Mate/R-30iB Mate Plus 控制装置的维修手册,旨在为用户提供详细的维修指导和安全注意事项。 1....

    IB75B主板手册

    9. 用户手册内容的可变性:文档强调用户手册的内容可能会改变,且不需要事先通知用户,这意味着用户在使用主板时应随时关注厂商发布的新信息和更新。 10. 品牌和产品名称:文档中提到所有的品牌和产品名称均为各自...

    FANUC机器人__R-30iB_30iB_Plus控制装置 维修说明书(附录篇).pdf

    综上所述,FANUC机器人R-30iB和R-30iB Plus控制装置的网络连接和维护涉及了多个关键点,包括网络环境的防护、电缆的选择与安装、接口的正确使用等。遵循这些指南,可以确保机器人系统的稳定通信和高效运行。

    FANUC机器人__R-30iB_30iB_Plus控制装置 维修说明书(维修篇).pdf

    本文档是关于FANUC机器人R-30iB和R-30iB ...总的来说,这份维修说明书是FANUC机器人用户的重要参考资料,它提供了详细的操作、安全和维修指南,旨在确保用户能安全有效地使用和维护FANUC R-30iB系列机器人控制装置。

    FANUC机器人R-30iB_30iB PLUS控制装置 选项功能操作说明书.PDF

    在使用FANUC R-30iB或R-30iB PLUS控制装置前,用户必须首先阅读并理解《FANUC Robot SAFETY HANDBOOK》(安全手册),这是确保安全操作的基础。手册强调了严禁复制内容,并指出产品可能会因改进而改变外观和规格,但...

    IB 1.05日文版

    标签的使用表明了这个压缩包的内容与"Ib"这个游戏或软件相关。 【压缩包子文件的文件名称列表】: "Ib_1.05"很可能包含了"Ib"游戏或软件的1.05版本的所有必要文件,包括执行程序、资源文件、配置文档等。解压这个...

Global site tag (gtag.js) - Google Analytics