我有一个UITableViewController,当点击一个单元格时,我希望该控制器弹出自身,然后让它弹出的控制器将另一个视图控制器推入堆栈。
我调用此方法是因为弹出的 viewController 是 tableViewController 的委托。
目前我使用延迟调用此方法,否则一切都会等待动画结束而混乱不堪。这种做法似乎有些巧妙,并且如果某人的设备没有在我给定的等待时间内弹出视图,则似乎会失败。
下面是部分代码:
我调用此方法是因为弹出的 viewController 是 tableViewController 的委托。
目前我使用延迟调用此方法,否则一切都会等待动画结束而混乱不堪。这种做法似乎有些巧妙,并且如果某人的设备没有在我给定的等待时间内弹出视图,则似乎会失败。
下面是部分代码:
//**** code in my tableViewController ***//
[self.navigationController popViewControllerAnimated:YES];
[self.delegate cellPressedInTableViewControllerWithCalculationsModel:(id)anArgmentMyDelegateMethodTakes];
// **** Code in the viewController being popped to ****//
//CalculationsViewController is a subclass of UIViewController
CalculationsViewController *calcViewController = [[CalculationsViewController alloc] init];
//some customization code would go her
[self.navigationController performSelector:@selector(pushViewController:animated:) withObject:calcViewController afterDelay:0.75];
//this seems like the arbitrary part, the 0.75 second delay.
[calcViewController release];
似乎有更好的委托方式来实现在动画完成后执行弹出/推入操作。在我看来,等待时间可能会导致意外问题。
我还尝试使用:
performSelectorOnMainThread:withObject:waitUntilDone
但是,代码会立即执行并且视图层次结构会出错。
我也看了这个问题: 委托问题 它让我有所进展,但我很想知道是否有更好的方法来执行这样的任务, 谢谢。
编辑:我还尝试将该方法包装在NSInvocation实例中,但我无法协调方法调用,直到动画完成而不是任意设置延迟。