gpt4 book ai didi

ios - 具有多个 subview 问题的容器 View

转载 作者:行者123 更新时间:2023-11-29 10:34:23 24 4
gpt4 key购买 nike

我正在尝试开发一个 TableView Controller (具有导航 Controller ),其中行连接到多个 View Controller (TextField、TextView、TableView、DatePicker、ImageView 等)。

所以我这样设计,如果我点击任何一行,它应该打开一个 UIViewController having container view 然后将适当的 Controller 放在容器中。所有相同类型的 tableview 行都在使用与容器的 subview 相同的 View Controller 。

我能够放置适当的 view controller(例如 - 1.TextViewController for Text View2. TableView 的 TableView Controller 3. 日期选择器的 DatePickerController。)在容器中取决于它们的行类型。

但是当我点击 done 按钮(第二个屏幕右上角)时,我对如何从 subview 中选取数据感到有点困惑。即对于子文本字段,无论我在输入框中键入什么,我都必须选择输入数据。对于子 TableView ,我隐藏了完成按钮,因此只要用户选择数据“cellForRowAtIndexPath”就会触发并传递选择的数据。

如何处理数据?在哪里写?还有其他设计方法吗?

enter image description here

最佳答案

正如@Suhail 提到的最好的方法,一般来说,当您想要将数据从 subview Controller 传递到父 View Controller 时,或者在某些情况下从 Controller 传递到先前显示的 Controller (仍在栈),是通过使用delegate 模式。您可以使用 iOS 协议(protocol)或 block 来实现委托(delegate)模式。在我看来,这两种方法都有其优点和缺点,对于该主题,您将不得不做更多的谷歌搜索,因为这里不是讨论它的地方。

让我们为您的案例定义一些案例(不是所有案例):

  1. 您想将数据从 ChildTableViewControler 发送到 Field Controller (屏幕 3 到屏幕 2)

    在这种情况下,据我了解,两个 Controller 都嵌入在一个父 Controller 中,因此您必须将父 Controller 设置为两个子 Controller 的委托(delegate)。您必须根据要发送给 Controller 的操作或数据创建一个或两个协议(protocol)。在每个 child 上创建一个名为 delegate 的属性(您可以选择自己的名字),在父 View Controller 上实现这些方法,每当您在屏幕上添加一个 child 时,设置 委托(delegate) 属性成为父 View Controller 。现在,无论何时你想向另一个 child 发送数据,你都必须调用协议(protocol)中声明的方法。请记住,您可以通过 childViewControllers 属性从父级访问两个子级。

    简短版本:针对 child 的一个/两个协议(protocol), parent 实现协议(protocol)并响应 child 的操作。

  2. 您想将数据从 Filed 发送到 TableViewController(从屏幕 2 到屏幕 1)

    在这种情况下,您将在父 View Controller 中声明一个协议(protocol),该协议(protocol)将由 TableViewController 实现。声明一个 delegate(或您喜欢的任何名称)父 View Controller 中的属性。当您在屏幕上添加 Filed Controller 时,您将 delegate 属性设置为 TableViewController。现在,您可以通过 delegate 属性与 Field Controller 中的 TableViewController 进行通信。

    简短版本:父 View Controller 中的一个协议(protocol),TableViewController 实现该协议(protocol)并响应TableViewController 操作。

  3. 您想将数据从 ChildTableViewController 发送到 TableViewController(屏幕 3 到屏幕 1)。这与案例 2 相同。

当我从 View Controller 发送数据时,我的规则之一是这样的:如果我想向前发送数据(到将要显示的下一个屏幕),那么我使用属性/方法。如果我想向后发送数据(到之前显示的 Controller ),那么我使用委托(delegate)/ block 。

我最后的建议是,在开始实现上述解决方案之一之前,请检查delegate/blocks 实现以及如何使用它们。如果实现错误,您可能会遇到很多麻烦,尤其是内存问题和随机崩溃。

有点跑题了,如果我的回答的读者是一个 9gagger 那么“抱歉发了这么长的帖子,这里有一个土 bean ”

关于ios - 具有多个 subview 问题的容器 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27860509/

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