DZNSegmentedControl和XLForm联合使用

来源:互联网 发布:linux 查看文件编码 编辑:程序博客网 时间:2024/05/03 15:42

前言:

可能我还没有掌握IOS开发的精髓, 总感觉写ios代码像调bug, 任何一个功能开发完成之后总会有莫名其妙的问题, 最终这些问题很大概率会归结为”系统特性”.

正文:

问题一

项目中想要实现一个控制器的嵌套, 选了DZNSegmentedControl 控件, 使用过程中出现了如下图的问题

20170603149645994110951.gif

控件的使用在第二个控制器里, 当返回第一个控制器时, 应用直接崩溃. 工程项目中没有一行有用的日志输出, 只能一行一行看代码, 最终看代码并与demo对比没发现任何不妥, 只能一行行注释代码看运行效果:

20170603149646084643443.jpg

经过运行测试, 发现是上述行代码引起的. 但是这个功能是什么相比不用多说,是很必要的,那怎么解决?

从现状分析我们可知, 当我们返回第一个控制器时,我们使用DZNSegmentedControl 控件的第二个控制器被销毁了, 由此引发崩溃. 而崩溃的原因在于 scrollviewsegmentedControl代理不为空. 解决办法很简单, 在销毁时让它为空!

于是在第二个控制器中添加了如下代码:

-(void) viewDidDisappear:(BOOL)animated{    self.svcontent.segmentedControl = nil;}

这样整个程序就完美运行了!

ps: 后面为了写本文重新写了个简单项目, 发现有崩溃日志了,也是囧! 日志如下:
20170603149646140049660.jpg

原因与我们推测是一样的, 当然还是使用上述解决办法!

问题二

XLFormViewControllerview嵌套仅scrollview中时 ,我们发现XLFormRowDescriptorTypeSelectorPush 类型的行不能弹出选项了. 原因我们很容易知道, 因为它要弹出的是一个新的窗口, 而原始的XLFormViewController 并不在管理当前window. 当我们将行类型其换成XLFormRowDescriptorTypeSelectorAlertView 就能够正常显示了.

20170603149646568812216.jpg



但我们同时又面临新的问题, 弹出的 “取消” 按钮是英文的.

使用XLFormRowDescriptorTypeSelectorAlertView 在整个工程路径中搜索, 发现XLFormSelectorCell.m文件中有NSLocalizedString(@"Cancel", nil)] 的代码, 于是我们确信通过适配多语言可以修改XLFrom英文.

20170603149646715824596.jpg

参考: 多语言适配

完整代码: https://github.com/talkfiled/SegmentedXLFormIssues