2

您好,感谢您的帮助。在 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 上创建的视图和按钮。

任何帮助将不胜感激。谢谢你们!

4

1 回答 1

0

推送和模态呈现视图控制器不会释放呈现它们的视图控制器。它只是将额外的视图控制器添加到堆栈中。您需要实现一个回调方法,以便当用户点击按钮返回根视图控制器时,您的设置视图控制器让根视图控制器知道将要发生的事情,以便您可以调用您编写的方法将界面重置回您需要的任何状态。您也许也可以使用viewWillAppear:,但这有点乱。

但是,根据 Apple 人机界面指南,用户希望当他们推送视图控制器或以模态方式呈现它时,他们所在的视图控制器将保存状态,并与他们回来时离开时的状态完全相同。在导航控制器上下文中未保留状态时,这令人不安和烦人。当它以模态呈现时尤其令人讨厌。

想一想——用户在一个假设的邮件应用程序中。他们开始输入电子邮件并设置字体大小和颜色。他们点击添加附件按钮,该按钮会弹出一个模态视图控制器,允许他们选择图片。他们选择图片并且模式视图被关闭,并且在您的实现中,邮件撰写界面将重置并且电子邮件内容将消失,或者至少选择的字体大小和颜色将恢复为默认值。这可不是什么好的体验。

于 2012-06-10T12:42:41.493 回答