在Button上更改viewController单击

时间:2011-04-28 06:51:40

标签: ios cocoa-touch uibutton viewcontroller

我是iPhone编程新手。我正在尝试的是我有一个带按钮的屏幕。而且我想改变视图控制器,不仅是我点击那个按钮时的视图(我知道如何添加子视图),因为从第二个视图控制器,我必须转到第三个视图,如果我先添加子视图,这是不可能的地点。有人可以帮帮我吗?这可能吗?如果是,怎么样?所有视图和视图控制器都是以程序方式创建的。我没有使用IB。

编辑:这是单击按钮时触发的相关代码

-(id)showCurrentLoc:(id)sender { 
 locationController = [currentLocController alloc]; 
 [entry removeFromSuperview]; 
 [newLoc removeFromSuperview]; 
 [currentLoc removeFromSuperview]; 
 [self.view setBackgroundColor:[UIColor clearColor]]; //[self.view addSubview: [locationController view]]; 
 [self.navigationController pushViewController:locationController animated:YES];  [locationController release]; 
 return 0; 
} //Location Controller is the tableViewController

由于 维克

5 个答案:

答案 0 :(得分:4)

你可以做这样的事情

        YourViewController *objYourViewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];
        [self.navigationController pushViewController:objYourViewController animated:YES];
        [YourViewController release];

答案 1 :(得分:3)

通常,您使用导航控制器进行此类操作,以便用户可以轻松返回上一个视图。您的视图控制器将执行以下操作:

[self.navigationController pushViewController:someNewViewController animated:YES];

如果您想自己管理视图控制器,您可以随时更改窗口的rootViewController属性。请阅读View Controller Programming Guide以获取完整图片。

答案 2 :(得分:2)

UINavigationController就是您所需要的。它管理一堆UIViewController s,如果你想添加新的UIViewController,只需将其推入此导航堆栈即可。它为您自动化后退按钮行为,并且您可以在完成后从堆栈中弹出当前的UIViewController。

答案 3 :(得分:0)

您可以使用UINavigationController。在init方法中添加这样的第一个UIViewController:

        [self setViewControllers:[NSArray arrayWithObject:viewController]];

然后当点击一个按钮或做出选择时,按下第二个控制器(在第一个viewController中):

[self.navigationController pushViewController:controller animated:YES]; 

这样你也会得到一个自动(后退按钮)。基本上你创建了一堆UIViewControllers,你可以像普通的堆栈一样推送和弹出。

我希望这会有所帮助。请看以下内容: UINavigationController Class Reference

答案 4 :(得分:0)

- (void) loadViewAtIndex:(NSInteger)index {

    [self unloadViewAtIndex:activeViewIndex];

    switch (index) {

        case 1:
        {
            if (viewController1 == nil)
            {
                viewController1 = [[ViewController1 alloc] initWithNibName:@"ViewController1" bundle:nil];
            }

            viewController1.view.frame = CGRectMake(0.0, 0.0, viewController1.view.frame.size.width, viewController1.view.frame.size.height);

            [window addSubview:viewController1.view];
        }
            break;

        case 2:
        {
            if (viewController2 == nil)
            {
                viewController2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];
            }

            viewController2.view.frame = CGRectMake(0.0, 0.0, viewController2.view.frame.size.width, viewController2.view.frame.size.height);

            [window addSubview:viewController2.view];
        }
            break;

        default:
            break;
    }

    activeViewIndex = index;
}

- (void) unloadViewAtIndex:(NSInteger)index {
    switch (index) {

        case 1:
        {
            if (viewController1 != nil)
            {
                [viewController1.view removeFromSuperview];
                [viewController1 release];
                viewController1 = nil;
            }
        }
            break;

        case 2:
        {
            if (viewController2 != nil)
            {
                [viewController2.view removeFromSuperview];
                [viewController2 release];
                viewController2 = nil;
            }
        }
            break;

        default:
            break;
    }
}