应该从父 ViewController 还是子 ViewController 调用 popViewController?

Posted

技术标签:

【中文标题】应该从父 ViewController 还是子 ViewController 调用 popViewController?【英文标题】:Should popViewController be called from the parent or child ViewController? 【发布时间】:2012-04-05 01:29:25 【问题描述】:

我可以从UINavigationController 的堆栈中弹出一个视图控制器,方法是从实例化它的父视图控制器或子视图控制器本身调用[self.navigationController popViewControllerAnimated:YES];。哪种方式更可取?

【问题讨论】:

【参考方案1】:

我想答案是“最有意义的”;正如您所说,您可以从父级、子级甚至其他包含导航控制器引用的类调用popViewControllerAnimated:

对于大多数应用程序,子视图将包含一个“返回”或“完成”按钮或其他一些导致它被弹出的操作。一般来说,我会说这是更可取的行为:子视图控制器会自行弹出。

否则,孩子将不得不(通过代表或其他方式)呼唤父母说“pop!”然后会调用popViewControllerAnimated:。对于这样一个简单的动作来说,这感觉有点太复杂了。

【讨论】:

这取决于你提供什么样的“返回”按钮,左箭头来自父视图控制器。 在我的情况下,我 am 在父级上调用委托方法,因为父级是 tableview“表单”,而我的子级是用于浏览、搜索和选择的 tableview来自父表单上字段的可能值列表。所以我可以看到这两种方式都有意义,尽管我的直觉说要在孩子身上做,因为那是用户操作发生的地方(选择一个选项)应该关闭视图。 +1。我的直觉还说,如果动作在子视图中,那么对 pop 的调用也应该在那里。

以上是关于应该从父 ViewController 还是子 ViewController 调用 popViewController?的主要内容,如果未能解决你的问题,请参考以下文章

将数据从父 ViewController 传递到子 VC,无需故事板 - Swift 5

Vue - 将 v-for 索引从父组件传递到子组件

如何从父进程获取子进程的状态,即它是停止、继续还是退出?对于 Linux,C 语言

VueJs 从父组件获取子表单数据

从父组件调用时,angular 2 变量在子组件方法中返回 null

如何从父静态函数调用静态子函数?