簡體   English   中英

捕獲UINavigationController的本機后退按鈕操作

[英]Catching UINavigationController's native back button action

關於覆蓋導航控制器的后退按鈕動作有很多問題,但是每個人都說沒有直接的方法可以做到這一點。 我通過繼承UINavigationController並覆蓋UINavigationBarDelegate方法實現了這一點。 但問題是UINavigationController的接口沒有實現UINavigationBarDelegate協議(但是它實現了這個方法,因為這個代碼可以工作:),我擔心Apple會拒絕該應用程序,因為這里使用的是未記錄的API。

所以,問題是:您如何看待,是否是私有API使用? 這是代碼:

@interface CustomNavigationController : UINavigationController <UINavigationBarDelegate>

@end

@implementation CustomNavigationController

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item {
    BOOL shouldPop = [[self topViewController] enableBackButton]; // every view controller overrides this method to disable or enable pop of view controller
    if (shouldPop) {
        //here is the warning about "UINavigationController may not respond to selector"
        return [super navigationBar:navigationBar shouldPopItem:item];
    } else {
        return NO;
    }
}

@end

關於UINavigationController的Apple文檔:此類不用於子類化。

雖然這個意圖不是禁令,並且在技術上可能不會讓您拒絕(使用似乎沒有引用任何私有API),但它應該影響您的設計決策。 您可能現在或將來可能會繼承意外行為(如果某些內容發生了變化,超級類的內部)。 導航控制器是很方便的東西,但根據你的需要,你最好還是自己動手。

一種替代方案可能是使用標准導航控制器,但將其navigationBar屬性設置為隱藏。 然后,您可以在XIB中設計並包含您自己的導航欄,其中包含針對您希望的任何操作的任何按鈕(例如,后退按鈕只需調用popViewController)。

編輯:不再勸阻UINavigationController的子類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM