請原諒我,關於如何以編程方式將UIBarButtonItem添加到NavigationBar已經有很多問題,但我似乎無法獲得任何解決方案以在我的工作情況。如何在使用UIPageViewController時將UIBarButtonItem添加到NavigationBar
這是我一直在學習UIPageViewController的簡單測試應用程序的佈局。
我有三個獨特的viewControllers工作很好的頁面視圖控制器。我現在想爲每個視圖控制器設置獨特的rightBarButtonItems
。通過簡單地做到這一點,我可以輕鬆地在DetailViewController
中設置一個共同的barButtonItem
。
UIBarButtonItem *newButton = [[UIBarButtonItem alloc] initWithTitle:@"Whatever"
style:UIBarButtonItemStylePlain
target:self
action:@selector(doSomething)];
self.navigationItem.rightBarButtonItem = newButton;
考慮到我需要爲每個在pageViewController
三頁的獨特的按鈕,我不能夠設置在detailViewController
按鈕。我已經嘗試了三個控制器的viewDidAppear
中的上述代碼,但不會出現按鈕。我也嘗試以相同的方式創建按鈕,然後像這樣設置它,但沒有運氣。
DetailViewController *vc = [[DetailViewController alloc] init];
vc.navigationItem.rightBarButtonItem = newButton;
我知道我靠近這裏,我只是不知道如何指定我需要一個按鈕添加到正在運行detailViewController我contentViewControllers嵌入在NavigationController的導航欄。任何幫助將是偉大的特別SNIPPETS。
作爲一個側面說明,我嘗試了一些其他方法出現問題。
- 在
viewDidLoad
設置按鈕,而不是viewDidAppear
- 這是行不通的,因爲
viewDidLoad
方法不叫你刷卡從一個頁面到下每次。然而,viewDidAppear
方法是,所以我試圖在那裏設置按鈕。有可能每次調用viewWillAppear
但我沒有檢查。
- 這是行不通的,因爲
- 在UIPageViewController委託方法
- 這是有問題的,如果用戶翻閱的頁面快速按鈕將無法更改或無法顯示設置按鈕。
SOLUTION
原來我很接近......而不是在UIPageViewController方法,我只是需要建立在每一個我的三個視圖控制器的navigationItem
屬性創建按鈕。當控制器在委託方法中實例化時,我只需將navigationItem屬性設置爲與detailViewController相同。在我的viewDidApper
方法中,我可以創建按鈕。然後在viewWillDisappear
我將按鈕設置爲nil
。您也可以創建DetailViewController
的viewdidLoad
按鈕並更改各個viewControllers的文本和操作viewDidAppear
。這是一個示例。
在委託方法
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
我打電話基礎上的viewController的指標一個輔助方法。助手方法在調用視圖控制器時實例化視圖控制器。一旦實例化,我設置了一些屬性,包括navigationItem屬性。
-(FirstController *)controllerAtIndex:(NSUInteger)index
{
FirstController *fvc = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstPageController"];
fvc.imageFile = self.pageImages[index];
fvc.titleText = self.pageTitles[index];
fvc.pageIndex = index;
fvc.navItem = self.navigationItem;
return fvc;
}
然後在的viewController的viewDidAppear
我只是這樣做
-(void)viewDidAppear:(BOOL)animated
{
UIBarButtonItem *newButton = [[UIBarButtonItem alloc]
initWithTitle:@"Whatever" style:UIBarButtonItemStylePlain target:self action:@selector(doSomething)];
navItem.rightBarButtonItem = newButton;
}
viewControllers上的navItem屬性是什麼? –
偉大的解決方案:-) – Fabrizio