从 TableViewController 中关闭 ViewController

Posted

技术标签:

【中文标题】从 TableViewController 中关闭 ViewController【英文标题】:Dismiss ViewController from TableViewController 【发布时间】:2009-09-23 07:04:00 【问题描述】:

我已经展示了 viewController,它包含一个导航控制器,它的视图是从另一个 nib 加载的,其中包含 UITableView。我想从 UITableViewController 中取消呈现的 viewController。我已经尝试了 self.parentViewController 和 self.navigationController 和 self.navigationController.parentViewController 的所有组合,但我仍然无法将其关闭。如何以及最好的方法是什么?

【问题讨论】:

【参考方案1】:

我从来没有让self.navigationController.parentViewController 像宣传的那样工作,但这确实对我有用:

NSArray *viewControllerArray = [self.navigationController viewControllers];
int parentViewControllerIndex = [viewControllerArray count] - 2;
[[viewControllerArray objectAtIndex:parentViewControllerIndex] myParentViewMethod:arg1 withArg2:arg2 ...];

【讨论】:

我无法让它工作,我在数组中只有一个项目并且仍然没有关闭视图。这可能与我创建它的方式有关。我用 XIB 添加了一个新的 UIViewController 并为 UINavigationController 创建了一个插座,然后我将它连接起来。接下来我用 XIB 创建一个 UITableViewController。回到 UIViewController 的 XIB,我将其设置为加载新的 nib 并将类设置为 UITableViewController 的类。【参考方案2】:

this 不起作用吗?

[myViewController presentModalViewController:otherController animated:YES];
// ...
[myViewController dismissModalViewControllerAnimated:YES];

【讨论】:

我需要处理来自 UITableView 的数据,并在 UITableViewController 中执行此操作,我需要关闭 parentViewController,但这不起作用【参考方案3】:

听起来你的等级制度有点让自己陷入困境,但没关系,我认为我们可以解决它。有两种“通常”的方法是:

    从控制器A,呈现控制器B,从B做工作,从B解散,返回A 从控制器 A,呈现控制器 B,从 B 执行工作,通过委托协议向 A 提出事件,从 A 解除 B,将控制权返回给 A

在您当前的情况下,这可能需要大量的重构,在这种情况下,将句柄作为属性公开给另一个控制器可能更容易,只需确保它是一个弱引用,如下所示:

@interface ControllerB : UIViewController

  ControllerA* controllerA;


@property (readwrite, nonatomic, assign) ControllerA* controllerA; // weak reference

@end

或者,无论你喜欢什么,关键是适当地确定变量的范围,以便在需要时可用。

【讨论】:

【参考方案4】:

我刚刚结束了使用委托来解散父级。

【讨论】:

以上是关于从 TableViewController 中关闭 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

如果从设置中关闭位置,则获取位置

FancyBox 从 iframe 中关闭并将父页面带到链接

如何从 ParentViewController 中关闭 formSheet 模态?

如何从后面的代码中关闭引导模式?

在 Access 中是不是可以从全局函数中关闭变量?

无法从另一个类中关闭 UIPopover