日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

不要在viewWillDisappear:方法中移除通知

發布時間:2024/4/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不要在viewWillDisappear:方法中移除通知 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

都知道viewWillAppear:方法是在控制器的view將要顯示的時候調用的,而viewWillDisappear:方法是在控制器的view將要隱藏的時候調用.

?

這看上去沒什么問題,鍵盤的顯示和隱藏也都能監聽到.可是稍微細心下就會發現,蘋果在iOS7中增加了導航控制器側滑返回功能,現在絕大多數App都使用了這項功能(有些App重寫了自帶的返回鍵之后忘記開啟左滑返回手勢了)。那么這項功能會帶來什么問題呢?

問題就是:

當觸發側滑返回時會調用系統自帶的viewWillDisappear:方法,在該方法中將監聽鍵盤顯示和隱藏的通知移除后,要是這時候用戶取消了側滑返回(即回到了原始狀態),那么再點擊界面上的textField喚出鍵盤,是不會發送鍵盤顯示和隱藏的通知了,因為通知已被移除。。。

?

解決方案

1、將注冊監聽鍵盤顯示和隱藏的代碼放到viewWillAppear:方法中

因為在觸發側滑返回后又取消側滑,則會調用viewWillAppear:方法。那么如果側滑返回將通知移除,則在取消側滑時又會將通知重新添加進去。

2、將移除通知的代碼放到dealloc方法中

dealloc方法是在控制器銷毀之時調用的。這個時候移除通知而不是在viewWillDisappear:方法中移除可以有效避免上述的問題。既然控制器都銷毀了,那么還留著相關的通知干嘛?該移除的移除。

上面給出了兩種解決方案,要說哪種最優,那肯定非第二種莫屬了。

我在這里可以舉個例子。假如我們現在有這么個場景:在控制器的view上有個label,在label上添加一個手勢(一般手勢都是在創建完label之后添加的),假設我在viewWillDisappear:方法中移除該手勢,則此時用戶側滑返回之時又取消側滑返回,那么原先在label上的手勢卻再也添加不回來了(這里label一般在viewDidLoad方法中創建),因為viewDidLoad方法不會再次調用。而第二種方法卻可以有效避免這種情況,這樣就可以避免我這種“手賤”的任意搗鼓了,是不是很完美呢?

?

總結如下:

1、iOS7新增加了導航控制器側滑手勢,當觸發側滑返回時,會調用系統的viewWillDisappear:方法,取消側滑返回時又會調用viewWillAppear:方法。

2、在做手勢和通知等一系列操作之時盡量在dealloc方法中執行,添加通知盡量在viewDidLoad等一次性方法中執行。

3、在viewWillAppear:、viewWillDisappear:、viewDidAppear:、viewDidDisappear:等類似于這種會多次調用的系統方法中添加代碼時,一定要多考慮業務邏輯,以免出現不必要的麻煩。

轉載于:https://www.cnblogs.com/pengsi/p/5568949.html

總結

以上是生活随笔為你收集整理的不要在viewWillDisappear:方法中移除通知的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。