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)
您应该使用标志来克服这种情况。您可以在弹出的视图控制器的 viewWillDisappear 方法中设置此标志。设置此标志后,您可以将另一个视图控制器压入堆栈。希望它是清楚的。
| 归档时间: |
|
| 查看次数: |
7560 次 |
| 最近记录: |