如何弹出viewController,然后通过委托推送viewController

Saa*_*mJB 8 iphone objective-c ios

我有一个UITableViewController,当按下一个单元格时,我希望控制器弹出自己,然后将控制器弹出,将另一个视图控制器推入堆栈.

我正在调用此方法,因为popped-to viewController是tableViewController的委托

我目前正在调用此方法并延迟它,因为否则,一切都搞砸了等待动画结束.这样做似乎有点hacky,在我看来,如果有人的设备没有在我给出的分配的等待时间内弹出视图,它会失败.

以下是一些代码:

//**** 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];
Run Code Online (Sandbox Code Playgroud)

似乎应该有更好的方法来弹出/推送将在动画结束后执行的委托.在我看来,等待时间可能会导致意外问题.

我也试过用:

 performSelectorOnMainThread:withObject:waitUntilDone
Run Code Online (Sandbox Code Playgroud)

但代码只是立即执行,视图层次结构搞砸了.

我也看过这个问题: 代表团问题 ,它让我这么做,但我很想知道是否有更好的方法来执行这样的任务,谢谢.

编辑:我也尝试在NSInvocation的实例中包装该方法,我无法让它协调方法调用,直到动画完成后没有任意设置延迟

Jas*_*ore 38

做多视图控制器的单个推或弹出多个干净的方法是设置UINavigationController的观点控制器阵列.

例如,弹出然后推送视图控制器:

MyTableViewController *vc = [[MyTableViewController alloc] init];

NSMutableArray *controllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
[controllers removeLastObject];
[controllers addObject:vc];

[self.navigationController setViewControllers:controllers animated:YES];
Run Code Online (Sandbox Code Playgroud)


Dar*_*ati 5

您应该使用标志来克服这种情况。您可以在弹出的视图控制器的 viewWillDisappear 方法中设置此标志。设置此标志后,您可以将另一个视图控制器压入堆栈。希望它是清楚的。