Ios Interface Builder IB-导航控制器,跳过视图
您好,我是iOS新手,有一个关于浏览我的视图的问题 我正在使用IB连接导航栏中的“上一个”和“下一个”按钮,以推送我的视图。这一切都很好。然而,我很难找到我到底需要做什么,或者我需要把代码放在哪里,这样我就可以跳过一个视图。为了简化我的处境 -我有1个导航控制器和4个视图控制器,分别命名为VC1、VC2、VC3、VC4。每个VC都有一个.H/.M -从VC1开始,它们一个接一个地跟随 假设我想跳过VC3,然后根据VC2中的设置直接跳到VC4。我应该把代码放在哪里做这件事?我需要从VC3的导航按钮上取下IBAction方法吗 我很抱歉,如果这已经涵盖了以前。如果有一个图坦卡蒙或者如果你知道有一个帖子回答这个问题,请让我知道。我做了一次搜索,但搜索返回的是一般性帖子,可能是因为我使用了错误的术语 提前谢谢。首先:Ios Interface Builder IB-导航控制器,跳过视图,ios,uinavigationcontroller,interface-builder,Ios,Uinavigationcontroller,Interface Builder,您好,我是iOS新手,有一个关于浏览我的视图的问题 我正在使用IB连接导航栏中的“上一个”和“下一个”按钮,以推送我的视图。这一切都很好。然而,我很难找到我到底需要做什么,或者我需要把代码放在哪里,这样我就可以跳过一个视图。为了简化我的处境 -我有1个导航控制器和4个视图控制器,分别命名为VC1、VC2、VC3、VC4。每个VC都有一个.H/.M -从VC1开始,它们一个接一个地跟随 假设我想跳过VC3,然后根据VC2中的设置直接跳到VC4。我应该把代码放在哪里做这件事?我需要从VC3的导航按钮
向我们展示一些代码,您在哪里推出新的视图控制器,可能是您的整个导航控制器代码 第二个(解决方案): 我假设:
- 上一个/下一个按钮链接到navigationController类
- 您有相应的方法(prevPressed:/nextPressed:),单击其中一个按钮时会调用这些方法
- 使用
@属性,您知道此时哪个控制器是可见的visibleViewController
- 每次单击导航栏中的按钮时,您都可以询问应按下/弹出的下一个/上一个视图控制器
- (Class)nextViewControllerClass;
- (Class)previousViewControllerClass;
在实施过程中:
- (Class)nextViewControllerClass {
return [VC4 class];
}
- (Class)previousViewControllerClass {
return [VC1 class];
}
在navigationController代码中,执行以下操作:
- (IBAction)next:(id)sender {
UIViewController *nextViewController = [[[self.visibleViewController nextViewControllerClass] alloc] init];
[self pushViewController:nextViewController animated:YES];
}
有几点想法:
iAction
,它可以为您执行以下操作:
- (IBAction)pushToNext:(id)sender
{
BOOL skipToVC4 = ... // put in whatever logic you'd use to bypass VC3 and go directly to VC4
UIViewController *nextController;
if (skipToVC4)
{
nextController = [self.storyboard instantiateViewControllerWithIdentifier:@"VC4"];
// obviously, if using NIBs, you'd do something like:
// nextController = [[ViewController4 alloc] initWithNibName:@"VC4" bundle:nil];
}
else
{
nextController = [self.storyboard instantiateViewControllerWithIdentifier:@"VC3"];
}
[self.navigationController pushViewController:nextController animated:YES];
}
这样,当您从VC4弹回时,您将直接弹回相应的视图控制器(例如,如果您从VC2推到VC4,当您弹回时,您将自动弹回VC2)
显然,如果您使用的是故事板,而不是手动调用pushViewController
,那么您可以从VC2中获得两个分段(一个到VC3,一个到VC4),为它们提供适当的标识符,然后只需调用performsguewithidentifier
即可切换到适当的视图控制器。但思想是一样的:您可以定义一个iAction
,根据您选择的逻辑执行适当的切换popViewControllerAnimated
?通常,“下一个”按钮会按到新的视图控制器,但“上一个”按钮按钮不应按到上一个视图,而应弹回到上一个视图。如果不弹回来,您可能会得到一些上一个视图控制器的多个实例。因此,“上一个”按钮应链接到执行以下操作的IBOutlet
:
- (IBAction)popToPrevious:(id)sender
{
[self.navigationController popViewControllerAnimated:YES];
}
popToViewController
或popToRootViewControllerAnimated
。例如,假设您从VC1推送到了VC2,到VC3,到VC4。如果您想从VC4一直弹回到VC1,您可以连接并在VC4中执行iAction
,如:
- (IBAction)popToRoot:(id)sender
{
[self.navigationController popToRootViewControllerAnimated:YES];
}
或者,如果您想从VC4弹出到VC2,您可以
- (IBAction)popToVC2:(id)sender
{
for (UIViewController *controller in self.navigationController.viewControllers)
{
if ([controller isKindOfClass:[ViewController2 class]])
{
[self.navigationController popToViewController:controller animated:YES];
return;
}
}
}
如果将VC2的引用传递给VC3,然后再传递给VC4,则可以通过navigationController.viewControllers
避免此迭代,但有时上述技术更简单
顺便说一句,如果您仅支持iOS 6及以上版本,并且正在使用故事板,那么您也可以使用“展开”分段,这是一种更优雅的方式,可以跳回特定的视图控制器。但不清楚(a)您是否在使用故事板;以及(b)您只支持iOS 6及更高版本,因此我将在这一点上避免讨论展开分段您可以添加一些您编写的示例代码吗?您谈到了一些设置,因此设置意味着可能有一些变量。若要跳过某个视图,您可以检查该变量并跳过压入导航控制器的VC3。如果您共享您的代码,其他人将更容易回答您的问题。感谢您抽出时间回答。I非常感谢。我不知道如何从故事板中提取源代码,因为我只是在“下一步”中按CTRL键拖动将当前视图上的按钮切换到下一个场景的视图控制器。我本应该更详细地说明变量,它实际上只是一个开/关开关,因此根据开关,我会转到VC3或VC4。再次感谢您的帮助。我建议在按住ctrl键拖动以创建“下一个”的同时segue通常是最优雅的方法,当执行需要编程控制的操作(例如,有选择地选择要转到哪个视图)时,您可以使用
iAction
(ctrl拖动到助手编辑器中的.h文件并执行“操作”)。而且您肯定不想使用来自“previous”按钮切换到上一个场景。这是一场灾难。Rob,为什么使用拖放方法倒退会不好?[这不是m的方式]