向 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,并在用户点击单元格时使其可见/不可见
如何在 Swift / iOS 中从 UITableView 中删除行并从 UserDefaults 中更新数组
UITableView中默认重新加载后如何记住选择的行并维护它们?