【发布时间】:2015-04-09 23:48:24
【问题描述】:
我对一个具有表格视图的视图控制器有一个模态segue。
当用户在该表格视图中选择一个单元格时,我希望关闭视图控制器,并在呈现视图控制器中将一个变量更改为所选单元格的内容。
如何以编程方式更改另一个视图控制器中的变量? (不使用 prepareForSegue 方法,因为我不是在做 segue,而是在关闭视图控制器)
【问题讨论】:
-
如果我理解正确,为什么不尝试委托?
我对一个具有表格视图的视图控制器有一个模态segue。
当用户在该表格视图中选择一个单元格时,我希望关闭视图控制器,并在呈现视图控制器中将一个变量更改为所选单元格的内容。
如何以编程方式更改另一个视图控制器中的变量? (不使用 prepareForSegue 方法,因为我不是在做 segue,而是在关闭视图控制器)
【问题讨论】:
这听起来有点奇怪(从表格视图中选择通常会在导航中向前移动),但您可以这样做。只需创建一个名为 CellSelectNotification 之类的协议,它需要一个识别所选单元格的方法(可能需要一个 indexPath,以保持实现简单)。您使父视图控制器符合该协议,并为呈现该表视图的视图控制器提供对其父级的引用作为 CellSelectNotification 委托。当表格视图选择了一个单元格时,您通过您定义的委托方法通知父所选索引路径,然后您允许关闭视图控制器。
这是允许通常不应该相互引用的对象进行通信的一般方式 - 委托模式说“我需要处理一些情况,对于接收者来说处理是delegated - 实现并不重要给调用者”。
您可以通过Key-Value Observing 或NSNotification 执行此操作的另一种方式,但在这种情况下,对于您想要的简单通知,最后两个有点重量级。
【讨论】: