Ios 单击按钮更改viewController

Ios 单击按钮更改viewController,ios,cocoa-touch,uibutton,viewcontroller,Ios,Cocoa Touch,Uibutton,Viewcontroller,我不熟悉iPhone编程。我正在尝试的是我有一个带按钮的屏幕。当我点击这个按钮时,我想改变视图控制器,而不仅仅是视图(我知道如何添加子视图),因为从第二个视图控制器,我必须转到第三个视图,如果我首先添加子视图,这是不可能的。谁能帮我一下吗?这可能吗?如果是,怎么做?所有视图和视图控制器都是通过编程创建的。我没有使用IB YourViewController *objYourViewController = [[YourViewController alloc] initWithN

我不熟悉iPhone编程。我正在尝试的是我有一个带按钮的屏幕。当我点击这个按钮时,我想改变视图控制器,而不仅仅是视图(我知道如何添加子视图),因为从第二个视图控制器,我必须转到第三个视图,如果我首先添加子视图,这是不可能的。谁能帮我一下吗?这可能吗?如果是,怎么做?所有视图和视图控制器都是通过编程创建的。我没有使用IB

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

编辑:以下是单击按钮时激发的相关代码

-(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
        YourViewController *objYourViewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];
        [self.navigationController pushViewController:objYourViewController animated:YES];
        [YourViewController release];
谢谢
Vik是你所需要的。它管理一个
UIViewController
s堆栈,如果您想添加新的UIViewController,只需将其推送到这个导航堆栈中即可。它为您自动执行后退按钮行为,您可以随时从堆栈中弹出当前UIViewController。

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

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

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

您可以这样做

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

您可以使用UINavigationController。在init方法中添加第一个UIViewController,如下所示:

        YourViewController *objYourViewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];
        [self.navigationController pushViewController:objYourViewController animated:YES];
        [YourViewController release];
        [self setViewControllers:[NSArray arrayWithObject:viewController]];
然后,单击按钮或进行选择时,按下第二个控制器(在第一个viewController中):

        YourViewController *objYourViewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];
        [self.navigationController pushViewController:objYourViewController animated:YES];
        [YourViewController release];
这样,您还将获得一个自动(后退按钮)。基本上,您可以创建一个UIViewController堆栈,可以像普通堆栈一样推送和弹出

        YourViewController *objYourViewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];
        [self.navigationController pushViewController:objYourViewController animated:YES];
        [YourViewController release];
我希望这有帮助。研究以下方面:

您可以使用导航控制器进行此操作。这是我正在尝试的,但问题是我正在尝试将tableViewController作为第二个viewController,但这不适用于此。如果我只是添加[self.view addSubView:[xyztableview]]。然后我可以看到我的表视图。我不知道第一种方法有什么问题?@Vik您如何定义tableViewController,即声明?您可以发布为tableViewController创建对象的代码吗?@Jennie-谢谢,在委托中声明后,我可以使用导航控制器更改视图控制器。@Krishnabhadra-这就是我正在尝试的,但问题是我正在尝试将tableViewController作为我的第二个视图控制器,但这不适用于此。如果我只是添加[self.view addSubView:[xyztableview]]。然后我可以看到我的表视图。我不知道第一种方法出了什么问题?它应该可以工作..你能发布相关代码以便我们可以交叉检查当点击按钮时触发的相关代码-(id)showCurrentLoc:(id)sender{locationController=[CurrentLocationController alloc];[entry removeFromSuperview];[newLoc removeFromSuperview];[currentLoc removeFromSuperview];[self.view setBackgroundColor:[UIColor clearColor];//[self.view addSubview:[locationController视图]];[self.navigationController pushViewController:locationController动画:是];[locationController释放];返回0;}//位置控制器是tableViewController@Vik..dont将代码放在注释中。。您可以编辑原始问题并将代码放在那里。@Barry删除了指向教程的链接。无论如何,由于我回答了原始问题,所以不需要它,该原始问题后来被编辑为用户使用的UINavigationController。@Caleb-这是我正在尝试的,但问题是我正在尝试将tableViewController作为第二个viewController,但这不适用于此。如果我只是添加[self.view addSubView:[xyztableview]]。然后我可以看到我的表视图。我不知道第一种方法有什么问题?@Vik抱歉——我无法理解你的评论。因为你是OP,我建议你编辑你的问题,以便更清楚地解释实际问题。但是,在你这样做之前,请仔细看看我引用的文档。这是iOS d的必读内容它明确地解释了如何从一个控制器移动到另一个控制器。-(id)showCurrentLoc:(id)发送方{locationController=[currentLocController alloc];[entry removeFromSuperview];[newLoc removeFromSuperview];[currentLoc removeFromSuperview];[self.view setBackgroundColor:[UIColor clearColor];/[self.view addSubview:[locationController视图]];[self.navigationController pushViewController:locationController动画:是];[locationController释放];返回0;}//Location Controller是TableViewController。对于初学者,您正在分配而不是初始化locationController。接下来,如果您使用的是导航控制器,则不需要所有addSubview/removeFromSuperview内容;只需将新的视图控制器推到导航堆栈上即可。@Caleb请告诉我viewcontroller是否在我想推的是UIDABBARCONTROLLER吗?我也对从一个VC切换到另一个VC感到困惑。99%的人说使用uinavigationcontroller它可以自动处理VCs之间的切换。我想定制管理VCs之间的切换。
        YourViewController *objYourViewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];
        [self.navigationController pushViewController:objYourViewController animated:YES];
        [YourViewController release];