viewWillAppear
。
我想在从其他视图返回时选择(突出显示)和淡出单元格。
是否有委托方法来执行此操作?
我正在使用UINavigationViewController。
答案 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
您可以将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。
这只是一种方法。如果弹出模态等,这将无法工作。