我想要建立一個自定義導航欄,它可以處理與股票UINavigationBar
不同的導航操作。爲了做到這一點,一個核心要求是導航欄永遠不會更改它的一組對象,因此它總是有一個具有相同左右欄項目和相同自定義視圖的項目。自定義視圖旨在具有面包屑式視圖,以允許用戶一次返回1個或多個視圖控制器。如何防止將UINavigationItems推送到由UINavigationController管理的UINavigationBar中?
我試圖通過使用自定義UINavigationBar
子類,像這樣一個普通的UINavigationController
做到這一點:
window.rootViewController = [[UINavigationController alloc] initWithNavigationBarClass:[BreadcrumbNavigationBar class] toolbarClass:nil];
,並在酒吧類我(現在)攔截假想修改所有呼叫在UINavigationItem
S IN的導航欄,什麼也不做,而不是:
@implementation BreadcrumbNavigationBar
- (void)setItems:(NSArray *)items
{
}
- (void)setItems:(NSArray *)items animated:(BOOL)animated
{
}
- (void)pushNavigationItem:(UINavigationItem *)item animated:(BOOL)animated
{
}
- (UINavigationItem *)popNavigationItemAnimated:(BOOL)animated
{
return nil;
}
@end
然而,這是行不通的。如果我導航到一個新的屏幕,導航欄將表面上不應該將新項目推到它的堆棧上。但是由於某種原因,新項目上的後退按鈕不會返回。
是我想做的可能嗎?使用UINavigationController
的替代方法是使用自定義導航控制器,它模仿UINavigationController
的外觀和行爲,但表現得很像我想要的導航欄;然而,有很多不錯的行爲UINavigationController
免費給我免費,我不想如果可能重新實施。
編輯
張貼在此之後我發現這個職位:
,如果我也實現了- (void)pushNavigationItem:(UINavigationItem *)item
那麼事情種爲先導航項目的工作;然而,如果我將這些方法填充一點,以便只保留items數組中的一個項目,那麼當我將視圖控制器推入堆棧時,導航欄的行爲就好像來自根視圖控制器的UIBarButtonItem
不再出現一樣,儘管該項目被阻止在pushNavigationItem
方法中被推入。
這是一個選項;當一個新的控制器被推入或彈出時,唯一粘性的部分就是改變內部導航控制器上的'edgesForExtendedLayout',並確保向上傳播到包含導航控制器。我使用的是一個自定義的視圖控制器,我相信現在沒有這個控制器是一樣的;如果一個令人信服的理由改變到你的建議實現出現,那麼我會試試看。 – Kevlar