導航控制器新增子控制器,你遇到問題了嗎?
阿新 • • 發佈:2018-11-17
iOS
中提供了經典彈框供開發者使用,但是每個公司為了展現出自身的優勢,會製作各種酷(sha)炫(diao)的彈框,網上也有其他各種各樣的實現。當然,也有使用控制器來實現的方案。下面說下使用此方案遇到的問題。
使用控制器實現的話,就會有個操作,將控制器當做子控制器新增到父控制器上。如果父控制器是個導航控制器,可能就會遇到彈框顯示無法退出的情況。具體步驟如下:
- 父控制器為導航控制器,並且導航控制器已經有了至少兩個子控制器。
- 展示彈框,這個時候彈框控制器至少是父控制器的第三個子控制器。
- 呼叫導航控制器的出棧操作,至少保證此步驟之後彈框控制器已經不在導航控制器的控制下。
這個時候,你一定會發現彈框還會存在,但是點選任何地方沒有了反應,彈框無法退出。
原因就是此時彈框控制器的父控制器不存在了,但是view
還在呈現。失去了管理,就無法操作了。
解決方法就是重寫UIViewController
的- (void)willMoveToParentViewController:(UIViewController *)parent
方法,並新增如下程式碼:
- (void)willMoveToParentViewController:(UIViewController *)parent { if (parent == nil) { [self dismiss]; return; } [super willMoveToParentViewController:parent]; }
這裡就是針對父控制器為nil
時,彈框退出。這樣就不會在出現上面的Bug
了。