UITableView接收参数

时间:2012-06-30 09:37:29

标签: ios uitableview

UITableView(A),如果选择此tableview的一个单元格,它将推送到另一个视图(B)。如果在视图(B)中按BACK按钮,它将运行此pushBack功能:

    - (void)pushBack
    {
        [self.navigationController popViewControllerAnimated:YES];
    }

我想将参数发送到视图(A)。参数用于确定刷新视图的需要(A)。我该怎么办?

提前谢谢!

3 个答案:

答案 0 :(得分:0)

要回答您的第一个问题,为了能够在从后台返回时显示启动图像,您必须将应用程序定义为无法在后台运行。这是通过将info.plist中的“应用程序不在后台运行”标志更改为YES来完成的。

答案 1 :(得分:0)

  1. 这是模拟器中的一个错误。如果您想在应用返回时显示Default.png,则有两种选择。第一种是在Info.plist中将UIApplicationExitsOnSuspend设置为YES。但是,这将要求您保存并加载应用程序状态,而不是让多任务处理为您完成工作。另一种方法是使用-applicationWillResignActive:中的Default.png覆盖您的应用,并将其移除-applicationDidBecomeActive:,就像启用密码锁时Dropbox一样。

  2. 实现一个名为-(void)willBecomeVisible:(MyParameterType *)parameter的方法(您的参数可能不是指针)。然后在-pushBack中,在弹出视图控制器之前,执行以下操作:

  3. ...

    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!");  
    }
    

答案 2 :(得分:0)

您应该阅读Model-View-Controller设计模式,它对您在iOS开发中非常有用。

通常,控制器不应直接告诉不同控制器的视图需要刷新。 ViewControllerA有责任更新其观点。但是,控制器可以相互通信以通知模型中的状态变化(或者可以通过模型本身来完成)。

在这种情况下,最简单的解决方案可能是让ViewControllerBViewControllerA发送消息 - 因此您应该在ViewControllerA上定义一个接口并传递{{1}的引用创建它时进入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]; } - 这只是一个示例。更简洁的方法是使用委托或通过从控制器观察模型本身来做到这一点,但我认为这在您学习MVC时更容易理解,以及如何最好地隔离和解耦M,V和C.