【问题标题】:Switching between View Controllers via action method inside current view controller [duplicate]通过当前视图控制器中的操作方法在视图控制器之间切换 [重复]
【发布时间】:2012-01-18 16:03:56
【问题描述】:

我的情况是我有一个包含UIButton 的主视图控制器(PrimaryViewController.h .m 中的UIViewController)。按下时,会显示第二个 View Controller (UINavigationController),一般的想法是按下“设置”按钮,然后弹出导航视图并允许用户修改其设置。

我已经能够做到这一点,但我对我的方法并不完全有信心。在主视图控制器中,我添加了一个导航控制器并将其链接为主控制器内的插座。然后当按下按钮时,函数showSettings被调用:

- (IBAction)showSettings {
    [self presentModalViewController:navigationViewController animated:YES];
}

类似地调用 hideSettings 来关闭。虽然这确实有效,但我不确定我是否以最好或正确的方式做到了这一点。我之前曾尝试在 MainWindow.xib 中创建导航控制器并将其与 App Delegate 链接,但是我遇到了一个问题,我需要在 PrimaryViewController.m 实现文件中调用/显示此控制器并且无法解决如何做到这一点(即如何在 App Delegate 类之外执行[super addSubview:];)。

我可以使用我现在拥有的,但想知道执行此操作的替代方法,主要是因为我对模态视图控制器的过渡动画不满意,而宁愿使用翻转动画。

提前致谢!

【问题讨论】:

  • 对,我不使用presentModalViewController,而是使用addSubview:navigationViewController.view。这行得通,但奇怪的是视图被放置在主窗口下方约 20 像素处,我可以看到它下面的视图。
  • 不得不在 Interface Builder 中调整框架并将布局设置为“想要全屏”。

标签: iphone objective-c ios uinavigationcontroller


【解决方案1】:

我会这样做: 1. 为导航控制器创建一个单独的类文件。说它叫 MyNavigateController。您可以将其添加到 YourAppAppDelegate。 MyNavigateController.h 看起来像这样:

@interface MyNavigateController : UIViewController 
{
    UINavigationController *navController;
}
@property (nonatomic, retain) IBOutlet UINavigationController *navController;
@end

对于 viewDidLoad 方法,MyNavigateController.m 看起来像这样:

- (void)viewDidLoad
{
[self.view addSubview:self.navController.view];
}

对于 MyNavigateController.xib,使用拖动导航控制器对象并将其分配给 PrimaryViewController 类。

在您的 PrimaryViewController 类中

- (IBAction)showSettings {
    ChildViewController *childViewController = [ChildViewController alloc]initWithNibName:@"ChildViewController" bundle:nil];
//childViewController.ivarsifany = ....  //optionaly assign values to ivars etc.
    [self.navigationController pushViewController:childViewController
                                         animated:YES];
}

【讨论】:

  • 你的意思是MyNavigateController *childViewController = [MyNavigateController alloc]initWithNibName:@"ChildViewController" bundle:nil];?你在哪里为self.navigationController声明了navigationController
  • No... ChildViewController 是您想要从 PrimaryViewController 呈现的任何子视图控制器类。它可以是另一个 UIViewController 等。 self.navigationController 是我上面提到的步骤产生的:“对于 MyNavigateController.xib,使用拖动 Navigation Controller 对象并将其分配给 PrimaryViewController 类。”
【解决方案2】:

如果您唯一的问题是presentModalViewController: 的特定过渡动画,那么您只需更改过渡类型即可。有几种不同的给定过渡动画,如下所示:

- (IBAction)showSettings {
    [navigationViewController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
    [self presentModalViewController:navigationViewController animated:YES];
}

还有更多的过渡样式,例如UIModalTransitionStyleCoverVerticalUIModalTransitionStyleCrossDissolveUIModalTransitionStylePartialCurl

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 2019-04-10
    相关资源
    最近更新 更多