UITableView(A) 如果选择这个 tableview 的一个单元格,它将推送到另一个 view(B)。如果在视图(B)中按下 BACK 按钮,它将运行这个 pushBack 函数:
- (void)pushBack
{
[self.navigationController popViewControllerAnimated:YES];
}
我想向视图(A)发送一个参数。该参数用于确定是否需要刷新视图(A)。我应该怎么做?
先感谢您!
UITableView(A) 如果选择这个 tableview 的一个单元格,它将推送到另一个 view(B)。如果在视图(B)中按下 BACK 按钮,它将运行这个 pushBack 函数:
- (void)pushBack
{
[self.navigationController popViewControllerAnimated:YES];
}
我想向视图(A)发送一个参数。该参数用于确定是否需要刷新视图(A)。我应该怎么做?
先感谢您!
要回答您的第一个问题,为了能够在从后台返回时显示启动画面,您必须将您的应用程序定义为无法在后台运行。这是通过将 info.plist 中的“应用程序不在后台运行”标志更改为 YES 来完成的。
这是模拟器中的一个错误。如果您想在应用返回时显示 Default.png,您有两种选择。第一个是UIApplicationExitsOnSuspend
在YES
你的 Info.plist 中设置。但是,这将要求您保存和加载应用程序状态,而不是让多任务为您完成工作。另一种方法是使用 Default.png in 覆盖您的应用程序-applicationWillResignActive:
并将其删除-applicationDidBecomeActive:
,就像 Dropbox 在启用密码锁定时所做的那样。
实现一个名为的方法-(void)willBecomeVisible:(MyParameterType *)parameter
(尽管您的参数可能不是指针)。然后在-pushBack
弹出视图控制器之前,执行以下操作:
...
NSArray *viewControllers = [[self navigationController] viewControllers];
NSUInteger count = [viewControllers count];
if (count >= 2) { // Ensures we will not have an out of bounds exception
UIViewController *viewController = [viewControllers objectAtIndex:count-2]; // Gets the view controller that will become visible
if ([viewController respondsToSelector:@selector(willBecomeVisible:)]) { // In case this view controller was pushed from a different view controller
[(MyTableViewAController *)viewController willBecomeVisible:myParameter];
} else {
NSLog(@"View controller about to become visible does not respond to -willBecomeVisible:");
}
} else {
NSLog(@"Not enough view controllers on the navigation stack!");
}
您应该阅读有关Model-View-Controller设计模式的信息,它将对您在 iOS 开发中非常有用。
一般来说,控制器不应该直接告诉不同控制器的视图它需要刷新。ViewControllerA
更新其观点是其责任。但是,控制器可以相互通信以通知模型中的状态更改(或者这可以通过模型本身来完成)。
在这种情况下,最简单的解决方案可能是让您ViewControllerB
向其发送消息ViewControllerA
- 因此您应该定义一个接口并在创建它时ViewControllerA
传递一个 in 的引用,以便您可以在需要时调用它。例如:ViewControllerA
ViewControllerB
在ViewControllerA
...
- (void)stateChanged
{
// Code to handle the change and update the view if it's visible.
// Alternatively, just set a BOOL flag here and then check it in
// viewWillAppear so that the view-update only happen later on when
// the view is actually about to appear.
}
在您的pushBack
方法中ViewControllerB
...
- (void)pushBack
{
[viewControllerA stateChanged];
[self.navigationController popViewControllerAnimated:YES];
}
你可以传递任何你想要的额外值stateChanged
——这只是一个例子。一种更简洁的方法是使用委托或通过从控制器观察模型本身来做到这一点,但我认为这在您学习 MVC 以及如何最好地隔离和解耦 M、V 和 C 时更容易理解。