使用分段控件推送视图控制器

时间:2011-06-22 16:54:35

标签: objective-c xcode

我正在制作一个标签栏应用程序,每个标签都有一个完全不同的应用程序。我在查看如何设置其中一个标签时遇到了很多困难。

我想要做的是拥有一个带有两个选项的分段控件(我称之为Test House和Corner)。当分段控件= 0时,将显示代表测试室的nib文件(只是一个UIViewController),当分段控件= 1时,将加载表示角的nib文件(也是一个UIViewController)。我在测试室和角落使用了一个单独的笔尖,因为每个笔尖上会有很多图像,因此只能在一个视图上编码。

目前我有三个笔尖,每个笔尖都有自己的控制器 - 一个用于分段控制视图,另一个用于我想要切换的每个笔尖。我的思维过程是始终显示Segmented控件视图,并根据分段控件推送其他两个nib。不幸的是,我无法使任何代码工作,可能是由于我的设置完全不合适。

我的viewDidLoad方法在具有分段控件的类中:

- (void)viewDidLoad {
    [super viewDidLoad];
    QSDTIntegratedAppAppDelegate *delegate = (QSDTIntegratedAppAppDelegate *)[[UIApplication sharedApplication] delegate];
    if (segmentedControl == 0) {
        [delegate.testHouseViewController pushViewController:interactiveTestHouseViewController animated:YES];
    }
    else {
        [delegate.testHouseViewController pushViewController:interactiveCornerViewController animated:YES];
    }   
}

我在分段控件改变时读取的功能:

- (void) segmentAction:(id)sender{
self.segmentedControl = sender;
QSDTIntegratedAppAppDelegate *delegate = (QSDTIntegratedAppAppDelegate *)[[UIApplication sharedApplication] delegate];
if ([segmentedControl selectedSegmentIndex] == 1) {
    NSLog(@"TEST HOUSE CHOSEN!");
    [delegate.testHouseViewController popViewControllerAnimated:YES];
    [delegate.testHouseViewController pushViewController:interactiveTestHouseViewController animated:YES];
}
if ([segmentedControl selectedSegmentIndex] == 1) {
    NSLog(@"CORNER CHOSEN!");
    [delegate.testHouseViewController popViewControllerAnimated:YES];
    [delegate.testHouseViewController pushViewController:interactiveCornerViewController animated:YES];
}

}

TestHouseViewController =用于分段控制笔尖的控制器 InteractiveTestHouseViewController =测试屋笔尖。分段控制中的选择1 InteractiveCornerHouseViewController =角落笔尖。分段控制中的选择2

我也收到了6次以下警告,让我感到难过: “TestHouseViewController”可能无法响应'-pushViewController:animated:

感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

pushViewController将与UINavigationController一起使用。如果您尝试使用UIViewController呈现视图控制器,则需要使用presentModalViewController。否则,如果testHouseViewController是UINavigationController的根视图控制器,请执行以下操作:

[delegate.testHouseViewController.navigationController popViewControllerAnimated:YES];
[delegate.testHouseViewController.navigationController pushViewController:interactiveCornerViewController animated:YES];

此外,在您的segmentAction方法中,您将两个if语句中的细分与1进行比较。这是一个修复:

- (void) segmentAction:(id)sender{
self.segmentedControl = sender;
QSDTIntegratedAppAppDelegate *delegate = (QSDTIntegratedAppAppDelegate *)[[UIApplication sharedApplication] delegate];

if ([segmentedControl selectedSegmentIndex] == 0) {
    NSLog(@"TEST HOUSE CHOSEN!");
    [delegate.testHouseViewController.navigationController popViewControllerAnimated:YES];
    [delegate.testHouseViewController.navigationController  pushViewController:interactiveTestHouseViewController animated:YES];
}
if ([segmentedControl selectedSegmentIndex] == 1) {
    NSLog(@"CORNER CHOSEN!");
    [delegate.testHouseViewController.navigationController  popViewControllerAnimated:YES];
    [delegate.testHouseViewController.navigationController  pushViewController:interactiveCornerViewController animated:YES];
}

答案 1 :(得分:0)

尝试delegate.testHouseViewController.navigationController推送和弹出。此外,第二个代码块中的两个if语句都询问分段控件是否为1。

答案 2 :(得分:0)

@AlexP,您打算如何实现这一目标:“我的思维过程是让分段控件视图始终显示”?