Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone:views仅在从其他视图返回时显示_Iphone_Ios - Fatal编程技术网

iPhone:views仅在从其他视图返回时显示

iPhone:views仅在从其他视图返回时显示,iphone,ios,Iphone,Ios,视图将出现在转到视图和从其他视图返回视图时都被调用 我只想在从其他视图返回时选择(高亮显示)并淡出单元格 是否有委托方法来执行此操作 我正在使用UINavigationViewController。在您的UINav控制器中,您可以创建一个“lastView”属性,并让每个视图控制器(由您的UINav控制器控制)将此属性设置为“ViewWillDisplay”。。。在你的目标视图中。。。要进行高亮显示和淡入淡出的那个,可以检查UINav控制器的这个属性,看看它是否为零 这只是一种方法。如果你弹出一

视图将出现
在转到视图和从其他视图返回视图时都被调用

我只想在从其他视图返回时选择(高亮显示)并淡出单元格

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


我正在使用UINavigationViewController。

在您的UINav控制器中,您可以创建一个“lastView”属性,并让每个视图控制器(由您的UINav控制器控制)将此属性设置为“ViewWillDisplay”。。。在你的目标视图中。。。要进行高亮显示和淡入淡出的那个,可以检查UINav控制器的这个属性,看看它是否为零


这只是一种方法。如果你弹出一个模态或者类似的东西,这是行不通的

视图出现时,将调用ViewWillDisplay

  • 在视图加载之后
  • 关闭或拉取视图控制器后
您可以将视图更改为如下所示

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

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

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


通常的做法是:当有人在视图控制器a的表视图中选择一行时,它会被选中/高亮显示,然后您推送一个新的视图控制器B。当视图控制器B被解除时,您可以在
viewdide
中设置取消选中表视图行的动画(这样用户可以看到它逐渐消失)在视图控制器A中。您不必担心视图控制器A是否刚刚出现或正在重新出现,因为在适当的情况下,只有选定的表视图单元格。

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

这四种方法可用于视图控制器的外观 回调以确定是否显示、取消或添加 或作为子视图控制器删除。例如,视图控制器 可以检查它是否因为被删除或弹出而消失 通过在其视图中询问自身,将消失:方法通过检查 表达([self ismissing]| |[self] isMovingFromParentViewController])

在代码中:

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

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


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

谢谢。
if
中的代码仅在从其他视图返回时执行。但是在第二次访问此视图时,firstTime已经是YES(因为它是静态的),并且如果执行了
,则
中的代码已被执行。如果
firstTime
是视图的属性,它可能会工作。是的,如果您是正确的,您可以将firstTime更改为当前class@Ryder谢谢你的好办法。我尝试了你的代码,但在进入视图时,只有self.isMovingToParentViewController是YES,从其他视图返回时,所有4个属性都是NO。所以
如果(!self.isMovingToParentViewController)
对我有效。是这样吗?我正在使用UITableViewController。但我需要高亮显示/淡出与我在视图中选择的单元格不同的单元格。我已经发布了关于这个的问题:@RyderMackay我搜索过了<代码>正在显示
用于模式
isMovingToParentViewController
适用于navi。因此,如果
是错误的,但是
|
是正确的,那么
内部的
&&
可能是错误的。就我而言,只有
!我移动到ARENTVIEWCONTROLLER
就足够了。谢谢。在我的例子中,某人在视图控制器B中选择了一行,而不是a。我在问题中解释了这一点:对不起,你是对的。我不需要知道我是否也会回到视野中。当
self.tableView.indexPathForSelectedRow
为空时,我所要做的就是选择/取消选择视图B中选择的新单元格。
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

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