![](/img/trans.png)
[英]UITabBarController with same ViewController in different tab
[英]How do I use a UITabBarController using the same ViewController for every tab?
並根據選擇的選項卡更改ViewController的內容和標題。
可能嗎?
以下是我在UITabBarController的viewDidLoad函數中嘗試過的方法
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
NSMutableArray * tabs = [[NSMutableArray alloc] init];
EventsViewController * upcomingEvents = (EventsViewController *)[[self viewControllers] objectAtIndex:0];
upcomingEvents.title = @"Upcoming Events";
upcomingEvents.events = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"]];
[tabs addObject:upcomingEvents];
EventsViewController * myEvents = (EventsViewController *)[[self viewControllers] objectAtIndex:1];
myEvents.title = @"My Events";
myEvents.events = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"MyEvents" ofType:@"plist"]];
[tabs addObject:myEvents];
[self.tabBarController setViewControllers:tabs animated:YES];
}
這導致錯誤
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UINavigationController setEvents:]: unrecognized selector sent to instance 0x108fe3b50'
我當前的故事板設置
編輯:
最后得到一些幫助,並從Unkn0wn.Bit了解。
我廢棄了自定義的UITabBarController,並剛剛在我的EventsViewController(UITableViewController)中調整了viewWillAppear函數,以根據tabBarController的selectedIndex更改源。
使用兩個單獨的NSMutableArray(myEvents,即將發生的事件),對多個tabBar按鈕有效地使用相同的視圖(具有不同的信息)。
(void)viewWillAppear:(BOOL)animated {
if([self.tabBarController selectedIndex]) {
self.events = self.myEvents;
self.navBar.title = @"My Events";
} else {
//temporary instead run function that either downloads events or tries to update if necessary
self.events = self.upcomingEvents;
self.navBar.title = @"Upcoming Events";
}
}
錯誤消息的這一部分:
-[UINavigationController setEvents:]
告訴您您正在UINavigationController
的實例上調用setEvents:
並且不響應。
您的問題是您忘記了視圖控制器層次結構,因為在導航控制器內部有EventsViewController
實例,因此您需要遍歷層次結構以調用正確的實例。
即:
UINavigationController *navController = (UINavigationController *)[[self viewControllers] objectAtIndex:0];
EventsViewController *upcomingEvents = [navController topViewController];
如果您使用界面生成器,請在故事板文件中創建多個視圖控制器(從Tab Bar Controller中按住ctrl +拖動以將其分配給選項卡),然后根據需要設計視圖,但是將其自定義類設置為同一類!
您可以使用ViewController
子類的多個實例,這將為您提供所需的內容。 但是,如果您只想為每個實例使用完全相同的實例,那么您將需要直接使用UITabBar
而不是UITabBarController
。 您可以將UITabBar
添加到UIViewController
子類中,並實現UITabBarDelegate
協議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.