UIViewControllers问题

时间:2012-06-10 12:19:46

标签: objective-c ios uiviewcontroller

您好,感谢您的建议,感谢您的帮助。在Xcode4中使用ViewControllers时,我遇到了一个非常奇怪的问题。首先,我必须说我没有使用故事板,我更喜欢以编程方式创建任何UI元素。所以我设置了一个UIButton,我想要的是,当按下它时,它会将我带到一个新的视图控制器。这是我用于按钮的代码:

-(void)settingsAndExportHandle:(UIButton *)buttonSender {
SettingsViewController* settingView = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil];
settingView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:settingView animated:YES];

}

此按钮已初始化并在RootViewController的viewDidLoad方法中分配。我想在按下按钮时切换到另一个视图控制器(在本例中为SettingsViewController)。

奇怪的是,当我按下按钮时,翻转控制器的动画进展顺利,但是当它完成后,我获得了与RootViewControllers上相同的东西(相同的自定义视图,相同的按钮,同样全部! )。问题是:我错过了什么?我不得不说我使用ARC(自动引用计数),因此我无法释放或取消分配我在RootViewController上创建的视图和按钮。

任何帮助将不胜感激。谢谢大家!

1 个答案:

答案 0 :(得分:0)

推送和模态显示视图控制器解除分配显示它们的视图控制器。它只是将附加视图控制器添加到堆栈中。您需要实现一个回调方法,以便当用户点击按钮以翻转回根视图控制器时,您的设置视图控制器会让根视图控制器知道将要发生的事情,这样您就可以调用您写入的方法将界面重置为您需要的任何状态。您也可以使用viewWillAppear:,但这有点混乱。

然而,根据Apple人机界面指南,用户希望当他们推动视图控制器或以模态方式呈现它时,他们所在的视图控制器将保存状态并且完全符合他们的方式他们回来时离开了。当在导航控制器环境中未保留状态时,令人不安并且烦人。当它以模态呈现时,特别令人讨厌。

想一想 - 用户在假想的邮件应用程序中。他们开始输入电子邮件并设置字体大小和颜色。他们点击添加附件按钮,这会打开一个模态视图控制器,允许他们选择图片。他们选择图片并取消模态视图,在您的实现中,邮件编写界面将重置,电子邮件内容将消失,或者至少所选字体大小和颜色将恢复为默认值。那不是一次好的经历。