iPhone:viewWillAppear仅在从其他视图返回时

时间:2012-06-08 13:05:13

标签: iphone ios

转到视图和从其他视图返回视图时都会调用

viewWillAppear

我想在从其他视图返回时选择(突出显示)和淡出单元格。

是否有委托方法来执行此操作?

我正在使用UINavigationViewController。

4 个答案:

答案 0 :(得分:11)

如果您使用的是iOS 5,则可以使用以下新属性:

  

这四种方法可用于视图控制器的外观   回调以确定它是否被呈现,被驳回或添加   或作为子视图控制器删除。例如,视图控制器   可以检查它是否因为被解雇或弹出而消失   通过检查自己在viewWillDisappear:方法中询问自己   表达式([self isDismissing] || [self   isMovingFromParentViewController])。

- (BOOL)isBeingPresented __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
- (BOOL)isBeingDismissed __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);

- (BOOL)isMovingToParentViewController __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
- (BOOL)isMovingFromParentViewController __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);

在您的代码中:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if (!(self.isMovingToParentViewController || self.isBeingPresented))
    {
        // animate
    }
}

修改

如果您使用UITableViewController,将属性-clearsSelectionOnViewWillAppear设置为YES将为您执行此操作。如果您使用的是UIViewController子视图的常规UITableView,则只需手动执行此操作。

答案 1 :(得分:4)

视图出现时调用viewWillAppear

  • 在viewDidLoad
  • 之后 解除或拉动视图控制器后

您可以将viewWillAppear更改为以下

- (void) viewWillAppear:(BOOL)animated
{
    static BOOL firstTime = YES;
    if (!firstTime) 
    {
        //Do your alpha animation
    }
    firstTime = NO;
}

答案 2 :(得分:3)

如果您的目标是iOS 5,则可以使用[self isBeingPresented][self isBeingDismissed]来确定是否正在从导航控制器添加或删除视图控制器。

我也怀疑你可以改进在表视图中选择/取消选择单元格时的逻辑,这样视图控制器是来还是去都无关紧要。

通常的做法是这样:当某人在视图控制器A的表视图中选择一行时,它会被选中/突出显示并推送一个新的视图控制器B.当视图控制器B被解除时,您可以设置动画。在视图控制器A中取消选择viewDidAppear中的表视图行(以便用户可以看到它淡出)。您不必担心视图控制器A是刚刚出现还是重新出现,因为只有在适当的情况下是一个选定的表格视图单元格。

答案 3 :(得分:0)

在您的UINav控制器中,您可以创建一个" lastView"属性并让每个视图控制器(由您的UINav控制器控制)在目标视图中设置此属性" viewWillAppear" ... ...您想要突出显示和淡化您的视图可以检查UINav控制器的这个属性,看看它是否是NIL。

这只是一种方法。如果弹出模态等,这将无法工作。