向 UItableview 添加行并在 Viewcontroller 之间传递数据

Posted

技术标签:

【中文标题】向 UItableview 添加行并在 Viewcontroller 之间传递数据【英文标题】:Adding rows to UItableview and passing data between Viewcontrollers 【发布时间】:2010-05-15 19:06:23 【问题描述】:

我在 plist 中有一个网站列表,当应用加载时,它会填充一个表格视图(位于导航控制器内)

但是我在导航栏添加了一个添加按钮,然后创建了另一个视图控制器来处理新网站的输入(如标题和 URL)。它与联系人应用程序的外观非常相似。有一个表格视图,当您点击添加时,添加 UI 会向上滑动。到目前为止,我已经完成了所有这些工作。

我的问题是当用户点击完成时会发生什么。 我可以将网站添加到 plist(每个网站都是 plist 中的字典,有 2 个键,atm) 但是那我如何告诉 tableView 更新呢?表格视图并未从主窗口中移除,只是添加视图已添加到“屏幕”顶部。

另一种询问方式是,当您在“添加联系人”屏幕上点击“保存”时:(不是我的图片)

(来源:iphone-recovery.com)

新联系人的数据(Xyz 的数据)如何显示在 tableview 上?

【问题讨论】:

【参考方案1】:

您可以使用NSNotifiactionCentre 通知其他视图。只需让 tableViewController 监听正确的NSNotification,并做出相应的响应。

当你初始化tableViewController时:

[myNSNotificationCentre addObserver:self selector:@selector(updateWithContactDictionary:) name:@"ContactAdded" object:theOtherViewController];

当您在theOtherViewController 中添加联系人时:

[myNSNotificationCentre postNotificationName:@"ContactAdded" object:self userInfo:userInfoStoredInAnNSDictionary];

那么一旦你添加了一个条目,表格就会立即自我更新。

【讨论】:

【参考方案2】:

使用通知是一个很好的解决方案。

另一个在 iPhone 应用程序中常用的方法是使原始表视图成为“添加”视图控制器的委托(通常以模态方式呈现),并让视图控制器在其委托上调用约定的方法,这将调用 reloadData 并关闭模态控制器 - 从逻辑上讲,最好从最初呈现它的对象中完成。

【讨论】:

一个苹果公司的人在斯坦福 CS193P 课程上发言时使用了委托,所以我认为这是最好的方式。

以上是关于向 UItableview 添加行并在 Viewcontroller 之间传递数据的主要内容,如果未能解决你的问题,请参考以下文章

在ios中为uitableview的所有单元格下添加不可见的detailview,并在用户点击单元格时使其可见/不可见

在uitableview中插入行并重新加载

如何在 Swift / iOS 中从 UITableView 中删除行并从 UserDefaults 中更新数组

UITableView中默认重新加载后如何记住选择的行并维护它们?

如何在 UITableView 中添加背景视频并在滚动 UITableViewCells 时使其固定?

如何使用CMD打开某应用程序命令行并在打开的应用程序中执行指定命令?