viewController转换完成后,removeFromSuperview。

时间:2014-02-19 18:16:57

标签: ios objective-c uiviewcontroller uinavigationcontroller

我在subview

中有以下方法
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.delegate performSegueWithIdentifier:@"segueAdicionarRefeicaoSearch" sender:[NSString stringWithFormat:@"%@", self.arrayLabels[indexPath.row]]];
    // Remove from Superview 
    [self.view removeFromSuperview];
}

此代码的作用是在performSegue动画完成之前删除视图,视觉效果不太好。

我知道一个解决方案就是删除这样的视图:

[self.view performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:0.25f];

但我认为选择动画的TimeInterval太机械了。我可以使用不同的东西吗?

我还可以在导航堆栈中获取subview索引,并在到达下一个视图的viewDidAppear时将其删除。但我认为这会更复杂。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

取决于视图是什么或为什么需要删除它,一个选项是在- (void)viewDidDisappear:(BOOL)animated中调用它我不知道为什么你需要从控制器中删除视图,但这个方法肯定在动画之后调用。

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

    [self.whateverView removeFromSuperview];
}

修改 根据您的回复,您也可以在viewWillAppear中执行此操作:因为听起来只有当您返回到viewController时才需要它

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

    [self.whateverView removeFromSuperview];
}