导航控制器+段控制器:无法更改视图

时间:2011-03-04 22:31:13

标签: iphone

我有一个根视图控制器,它有几个按钮。单击这些按钮,我显示了一个标签栏控制器,每个控制器显示表视图控制器。我做到了这一点。基本上,对于每个表视图控制器,我都有一个专用类。为了继续,我替换了标签栏控制器,并将分段控制器添加到导航标题视图。

问题是我如何根据所选索引设置视图。我可以将导航标题设置为分段控件但在选择时我无法设置视图。

以下是我迄今取得的成就。 注意:重要的是运行代码,稍后我会进行代码优化。我不想隐藏意见。 我想调用不同的视图控制器类。

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];

但是这个选项并没有给我正确的结果。我应该如何调用视图控制器类并根据所选索引设置其视图。

2 个答案:

答案 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。