使用 IBAction 切换回主视图控制器

Posted

技术标签:

【中文标题】使用 IBAction 切换回主视图控制器【英文标题】:Using an IBAction to switch back to Main View Controller 【发布时间】:2011-04-04 23:08:40 【问题描述】:

我有一个应用程序,它有许多视图,这些视图通过我的主视图中的一些自定义 UIButtons 导航到。主视图名为 iBMRViewController,并具有一些通过界面生成器放入的 PNG 图像形式的欢迎图形。它还具有 6 个自定义 UIButton,我使用以下代码通过代码创建;

// This is the code which creates, and defines the properties of the 'Warning' button on the main view.
    UIButton *warningButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
    warningButton.frame = CGRectMake(225.0, 270.0, 60.0, 60.0);
    [warningButton setTitle:@"" forState:UIControlStateNormal];
    warningButton.backgroundColor = [UIColor clearColor];
    [warningButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal ];
    UIImage *warningButtonImageNormal = [UIImage imageNamed:@"Warning.png"];
    UIImage *warningStretchableButtonImageNormal = [warningButtonImageNormal stretchableImageWithLeftCapWidth:12 topCapHeight:0];
    [warningButton setBackgroundImage:warningStretchableButtonImageNormal forState:UIControlStateNormal];
    UIImage *warningButtonImagePressed = [UIImage imageNamed:@"whiteButton.png"];
    UIImage *warningStretchableButtonImagePressed = [warningButtonImagePressed stretchableImageWithLeftCapWidth:12 topCapHeight:0];
    [warningButton setBackgroundImage:warningStretchableButtonImagePressed forState:UIControlStateHighlighted];
    [warningButton addTarget:self action:@selector(warningButtonAction:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:warningButton];

现在,这一切正常,按钮功能完美,显然我也为它们设置了可以完美运行的操作。在每个页面上,我都有一个 UINavigationBar 和一个 UINavigationItem 通过界面构建​​器设置并设置为使用以下代码将我带回我的主视图;

//This is the code which opens up the new view when 'Begin' button is tapped.
-(IBAction)beginHomeButtonAction:(id)sender 
    iBMRViewController *controller = [[BeginView alloc] initWithNibName:@"iBMRViewController" bundle:nil];
    controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:controller animated:YES];
    [controller release];

这也有效,但是,当它带我回到“iBMRViewController”时,它只显示通过界面构建​​器 xib 文件(即欢迎 png 文件)设置的内容。它不显示我通过代码添加的按钮。

谁能告诉我我哪里出错了?将不胜感激。

谢谢

【问题讨论】:

【参考方案1】:

事实上,beginHomeButtonAction 并没有“带你回到主视图”。它创建一个新的视图控制器,带有一个新的视图,并呈现它。它与控制器类的种类相同,但与该类的实例不同。

要关闭视图,实际上将用户带回主视图,您必须关闭您从主视图呈现的视图。如何做到这一点取决于您当时的呈现方式,但您可以尝试popViewControllerAnimateddismissModalViewControllerAnimated。 (谷歌是你的朋友)

【讨论】:

谢谢。我会尽力理解你刚才所说的,哈哈。谷歌确实是我的朋友,当我能理解他在说什么的时候。但是行话对我来说都是相对较新的,所以有时很难。我想我明白你在说什么,所以我会试一试。谢谢 是的。如有疑问,请在原始问题中发布显示子视图的代码。 我设法解决了这个问题,而不是在我的 IBAction 中使用此代码 - iBMRViewController *controller = [[BeginView alloc] initWithNibName:@"iBMRViewController" bundle:nil]; - 我将 [[BeginView alloc] 更改为 [[iBMRViewController alloc],它就像一个魅力。 不过,您正在构建一个新视图,而不是返回到之前的现有视图。

以上是关于使用 IBAction 切换回主视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

无法切换回原始视图

分段控制切换视图?

切换回搜索栏处于活动状态时,选项卡栏视图变为空白

在 iOS 中切换视图控制器的最佳方法

在主视图控制器的自定义单元格中使用来自 UIButton 的 IBAction

UIViewController 在 UITabBar 中执行的操作并切换回原始视图