这是对已定义架构的传统iPhone应用程序的补充(多年前,由其他人。)
主要限制是主菜单系统的功能基于配置文件,因此我无法从主菜单调用任何特定的初始化代码。
这意味着我正在开发的视图是独立的,并且必须以某种方式使用来自系统的信息来管理其状态。
此外,在每个屏幕上都有一个“设置”按钮,将用户带到“设置”窗格,该窗格被推送到“我的”视图顶部的导航堆栈上。当用户关闭设置窗格时,我的视图会按照正常导航重新出现。
好的,所以这是我的问题:
当用户从菜单中输入我的视图时,我希望它被重置,因此所有输入字段都是空的。
如果用户进入设置屏幕并返回我的屏幕,我希望保留所有先前的输入,即不重置为空字段。
如果用户返回主菜单,然后重新进入我的屏幕,则字段应该再次为空。
是否有一种强大的,有文档记录的,最好是简单的方法来了解我是否应该在这种情况下重置字段?
答案 0 :(得分:2)
您是否可以检查导航堆栈以查看设置页面当前是否在堆栈中?
- (void)viewWillAppear:(BOOL)aAnimated
{
[super viewWillAppear:aAnimated];
NSArray* stack = [[self navigationController] viewControllers];
UIViewController* last = [stack lastObject];
}
答案 1 :(得分:1)
当您的视图因某种原因被隐藏时,可能会调用viewDidDisappear。您可能会获得UIWindow并处理视图链以查找视图在链中的位置(如果它完全存在)以及隐藏它的内容。
但是,非常重要的是,那种可能需要“迷宫般的亮点”而不是强大的东西。(虽然如果一直使用导航控制器,它会变得更加简单。)
答案 2 :(得分:0)
在相关的视图控制器中,您如何设置委托。
id delegate;
@property (nonatomic, assign) id delegate;
表示标题,然后在实现中合成。
每当您推送到此视图控制器时,请从推送视图中将self
设置为委托。然后在此视图控制器中,您可以使用以下内容执行viewDidLoad
或viewDidAppear:
(或您认为必要的任何地方)的检查:
if ([self.delegate isKindOfClass:[SomeClass class]]) {
// now you can find which class sent to this view;
}
应该这样做,所以我希望它可以帮助你
编辑:考虑到您在不使用导航控制器的情况下切换视图,上述内容将始终无效。在这种情况下,您可能最好使用内部属性以及设置窗格的插座。所以在这个视图控制器中,你会在标题中想要这样的东西:
BOOL shouldReset;
@property (readwrite) BOOL shouldReset;
在viewDidLoad
中,您需要将其初始化为shouldReset = YES
。您还应该将其放在viewDidDisappear:
中,因为这是您的默认行为。当您显示设置窗格时,请将设置作为当前视图控制器的插座,以便您可以在设置中(按下后退按钮时)设置[self.otherViewController setShouldReset:NO]
。然后在您的viewDidAppear:
中查看相关的原始视图控制器,您可以检查它是否应该重置其字段