gpt4 book ai didi

iphone - 如何弹出一个 viewController,然后通过委托(delegate)推送一个 viewController

转载 作者:可可西里 更新时间:2023-11-01 03:01:24 26 4
gpt4 key购买 nike

我有一个 UITableViewController,当一个单元格被按下时,我希望 Controller 自行弹出,然后让 Controller 弹出,将另一个 View Controller 压入堆栈。

我正在调用此方法,因为弹出的 viewController 是 tableViewController 的委托(delegate)

我目前正在延迟调用此方法,否则,一切都会搞砸,等待动画结束。这样做似乎有点老套,在我看来,如果某人的设备没有在我指定的等待时间内弹出 View ,它就会失败。

部分代码如下:

//**** 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];

似乎应该有更好的方法来通过将在动画结束后执行的委托(delegate)来弹出/推送。在我看来,等待时间可能会导致意想不到的问题。

我也尝试过使用:

 performSelectorOnMainThread:withObject:waitUntilDone

但是代码立即执行, View 层次结构搞砸了。

我也看过这个问题: Delegation question它让我走了这么远,但我很好奇是否有更好的方法来执行这样的任务,谢谢。

编辑:我也尝试过将方法包装在 NSInvocation 的实例中,但在动画完成之前我无法在没有任意设置延迟的情况下协调方法调用

最佳答案

除了单次推送或弹出 View Controller 外,最干净的方法是设置 UINavigationController 的 View Controller 数组。

例如,弹出然后推送一个 View Controller :

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

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

[self.navigationController setViewControllers:controllers animated:YES];

关于iphone - 如何弹出一个 viewController,然后通过委托(delegate)推送一个 viewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7142779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com