viewWillAppear
在进入视图和从其他视图返回视图时都会调用。
我只想在从其他视图返回时选择(突出显示)和淡出一个单元格。
有没有委托方法来做到这一点?
我正在使用 UINavigationViewController。
如果您使用的是 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
,将属性设置-clearsSelectionOnViewWillAppear
为YES
将为您执行此操作。如果您使用UIViewController
带有UITableView
子视图的常规,则只需手动执行此操作。
viewWillAppear 在视图出现时被调用
您可以将 viewWillAppear 更改为以下
- (void) viewWillAppear:(BOOL)animated
{
static BOOL firstTime = YES;
if (!firstTime)
{
//Do your alpha animation
}
firstTime = NO;
}
如果您的目标是 iOS 5,您可以使用[self isBeingPresented]
和[self isBeingDismissed]
来确定视图控制器是从导航控制器中添加还是删除。
我还怀疑您可以改进在表格视图中选择/取消选择单元格时的逻辑,这样视图控制器是来还是去都无关紧要。
通常的做法是:当有人在视图控制器 A 的表视图中选择一行时,它会被选中/突出显示,然后您推送一个新的视图控制器 B。当视图控制器 B 被关闭时,您可以动画取消选择视图控制器 A 中的表视图行viewDidAppear
(因此用户可以看到它淡出)。您不必担心视图控制器 A 是刚刚出现还是重新出现,因为在适当的情况。
在您的 UINav 控制器中,您可以创建一个“lastView”属性并让您的每个视图控制器(由您的 UINav 控制器控制)将此属性设置为“viewWillAppear”...在您的目标视图中...您想要的那个做高亮和淡化你可以检查 UINav 控制器的这个属性,看看它是否为 NIL。
这只是一种方法。如果您弹出模态框等,这将不起作用。