DZNSegmentedControl和XLForm聯合使用

前言:

可能我還沒有掌握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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容