【问题标题】:Example for giving a variable to the parent view needed为所需的父视图提供变量的示例
【发布时间】:2011-04-28 14:26:39
【问题描述】:

我已经阅读了一些关于 SO 的主题,但我不知道如何正确使用协议将变量传递给父视图。

基本上,我有一个 tableListView,它是一个普通的 UIViewController,但附加了 UITableViewDataSource 和 UITableViewDelegate,因此视图包含一个表。

当按下该表中的某个项目时,用户会移动到 detailView。我想看看一个特定的值,比如一个字符串,是如何从 detailView 传递到 tableListView 的(所以我可以根据那个字符串标记几个单元格)。

有人有具体的例子吗?你会是最好的

【问题讨论】:

  • 以确保我理解... UIViewController (vcA) 拥有一个 UITableView,在按下 UiTableViewCell 时,您创建另一个 UIViewController (vcB) 并将该视图控制器推送到 UINavigationController 的堆栈中。您需要将字符串传递给 vcB,当用户操作或更改该字符串时,您需要更新 vcA 以反映更改。对吗?
  • @Jason Cragun:这非常正确,虽然 vcA 不会将该值传递给 vcB,但 vcB 仍然可以更新 vcA 中的字符串。两种方式对我来说都包含相同的问题:如何从 vcB 更新 vcA 中的值?

标签: iphone objective-c xcode ios4 protocols


【解决方案1】:

您必须在 detailView 中添加一个 @property,然后在推送它之前执行以下操作:

[detailView setMyString:mystring];

【讨论】:

  • edo42:嘿,谢谢你的提示,但我需要这个:(
【解决方案2】:

每个视图控制器都应该管理一个模型。您的“列表”视图控制器应该管理一组模型对象。当您填充 tableview 时,您应该使用它的数据源方法来检查对象数组并显示它们。 tableview 中的索引和数组中的索引会匹配。

您的详细视图应该管理对数据建模的单个对象。当您的“列表”表视图的委托方法触发时,您将创建一个新的详细视图,将数组中的一个对象分配给详细视图属性并将详细视图推送到堆栈上。

在详细视图上,您​​可能有一个“保存”按钮,或者当视图从堆栈中移除时,只需保存对模型对象的更改,无论哪种方式,您只需更新对详细视图具有的模型对象的引用.一旦列表视图再次位于堆栈顶部,您可以在列表视图上执行 [self.tableView reloadData]。任何更新现在都将可见。

这里是苹果示例代码的链接 http://developer.apple.com/library/ios/#samplecode/SimpleDrillDown/Introduction/Intro.html%23//apple_ref/doc/uid/DTS40007416

【讨论】:

  • 感谢您的信息!不过,恐怕我会需要它 :(
  • @Joetijah:无论哪种方式,您都需要遵循操作模型的建议,而不必担心在两个控制器之间传递值。 MVC 模式允许每个控制器独立于其他控制器操作模型。您的第二个视图控制器应该操纵您的模型并更改您问题中的“字符串”值。当您第一次查看控制器再次可见时,您需要更新它对已更改模型的表示
【解决方案3】:

都解释了here

【讨论】:

    猜你喜欢
    • 2019-03-22
    • 2021-09-30
    • 2019-05-01
    • 2020-10-18
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 2021-07-18
    • 2020-04-06
    相关资源
    最近更新 更多