我有一个根视图控制器,它有几个按钮。单击这些按钮,我显示了一个标签栏控制器,每个控制器显示表视图控制器。我做到了这一点。基本上,对于每个表视图控制器,我都有一个专用类。为了继续,我替换了标签栏控制器,并将分段控制器添加到导航标题视图。
问题是我如何根据所选索引设置视图。我可以将导航标题设置为分段控件但在选择时我无法设置视图。
以下是我迄今取得的成就。 注意:重要的是运行代码,稍后我会进行代码优化。我不想隐藏意见。 我想调用不同的视图控制器类。
RootViewController类(点击按钮,我调用第一个视图控制器。这样我就可以设置段控制器了:
-(IBAction) pushSegmentController: (id) sender
{
NSLog(@"My Location Button being clicked/touched") ;
FirstViewController *firstViewController = [[FirstViewController alloc] init] ;
[self.navigationController pushViewController:firstViewController animated:YES];
// Releae the view controllers
[firstViewController release];
}
在FirstViewController类中:
-(void)viewDidLoad {
[super viewDidLoad];
NSArray *viewControllers = [self segmentViewControllers];
self.segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Table1", @"Table2"]];
self.navigationItem.titleView = segmentedControl;
[self.segmentedControl addTarget:self
action:@selector(indexDidChangeForSegmentedControl:)
forControlEvents:UIControlEventValueChanged];
self.segmentedControl.selectedSegmentIndex = 0;
}
-(void)indexDidChangeForSegmentedControl:(UISegmentedControl *)aSegmentedControl {
NSUInteger index = aSegmentedControl.selectedSegmentIndex;
if(index ==0) {
UIViewController *table1Controller = [[AustraliaViewController alloc] initWithStyle:UITableViewStylePlain];
**???? HOW SHOULD I SET THE VIEW OVER HERE... AS ITS A PART OF THE NAVIGATION CONTROLLER**
}
else { }
}
注意:我尝试过使用此选项:
[navigationController setViewControllers:theViewControllers animated:NO];
但是这个选项并没有给我正确的结果。我应该如何调用视图控制器类并根据所选索引设置其视图。
答案 0 :(得分:1)
根据按钮索引,您可能不希望拥有一个具有不同视图的视图控制器,尤其是因为您已经有不同屏幕的视图控制器。
如果您希望将表视图控制器推送到导航控制器上,那么它将有一个后退按钮,可以让您返回FirstViewController,使用
-(void)indexDidChangeForSegmentedControl:(UISegmentedControl *)aSegmentedControl {
NSUInteger index = aSegmentedControl.selectedSegmentIndex;
UIViewController *newViewController = nil;
if(index ==0) {
newViewController = [[AustraliaViewController alloc] initWithStyle:UITableViewStylePlain];
} else {
newViewController = [[YourOtherViewController alloc] initWithStyle:UITableViewStylePlain];
}
[self.navigationController pushViewController:newViewController animated:YES];
}
如果您希望从底部滑入并且您想要设置所有必要的用户界面(例如,关闭按钮),请用
替换最后一行 [self presentModalViewController:newViewController animated:YES];
答案 1 :(得分:-1)
怎么样?
self.view = table1Controller;
或
[self.view addSubview:table1Controller];
我刚刚看到你犯了一个错误。您正在分配UIViewController,但是像tableViewController(使用initWithStyle)一样初始化它。
如果它是UITableViewController的子类,请使用它来分配它,而不是UIViewController。