5

viewWillAppear在进入视图和从其他视图返回视图时都会调用。

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

有没有委托方法来做到这一点?

我正在使用 UINavigationViewController。

4

4 回答 4

11

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

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

- (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,将属性设置-clearsSelectionOnViewWillAppearYES将为您执行此操作。如果您使用UIViewController带有UITableView子视图的常规,则只需手动执行此操作。

于 2012-06-08T13:20:01.293 回答
4

viewWillAppear 在视图出现时被调用

  • 在 viewDidLoad 之后
  • 在您关闭或拉取视图控制器之后

您可以将 viewWillAppear 更改为以下

- (void) viewWillAppear:(BOOL)animated
{
    static BOOL firstTime = YES;
    if (!firstTime) 
    {
        //Do your alpha animation
    }
    firstTime = NO;
}
于 2012-06-08T13:14:59.177 回答
4

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

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

通常的做法是:当有人在视图控制器 A 的表视图中选择一行时,它会被选中/突出显示,然后您推送一个新的视图控制器 B。当视图控制器 B 被关闭时,您可以动画取消选择视图控制器 A 中的表视图行viewDidAppear(因此用户可以看到它淡出)。您不必担心视图控制器 A 是刚刚出现还是重新出现,因为在适当的情况。

于 2012-06-08T13:19:45.580 回答
0

在您的 UINav 控制器中,您可以创建一个“lastView”属性并让您的每个视图控制器(由您的 UINav 控制器控制)将此属性设置为“viewWillAppear”...在您的目标视图中...您想要的那个做高亮和淡化你可以检查 UINav 控制器的这个属性,看看它是否为 NIL。

这只是一种方法。如果您弹出模态框等,这将不起作用。

于 2012-06-08T13:12:01.210 回答