【发布时间】:2015-02-19 17:43:25
【问题描述】:
我在开发我的 iOS 应用程序时尝试遵循 MVC 模型,但这里有一个问题:如何从 tableviewcell 而不是其父 tableviewcontroller 触发 viewcontroller。 PresentViewController 只能从视图控制器调用。
情况如下:
我在后端有一个数据对象 myDataObject;
我还有一个表格视图,其中我使用 MyDataObject 的实例填充了一种表格视图单元格 myDataCell;
现在,我想以编程方式(而不是 segue)从 myDataCell 中的 UIButton 点击事件触发另一个 ViewController。
我的目标是尽可能地解耦 MVC,尽量避免让每个对象都保持指向其他两个所涉及的对象,例如,我不希望单元格保持对 MyDataObject 的引用,我也不希望它保持对其 tableviewcontroller 的引用。
以下是如何处理这种情况的几种方案以及挑战:
- 声明myDataCellDelegate 和myDataObjectDelegate,在tableviewcontroller 中实现两个delegate 声明的方法,并在delegate 中设置tableviewcontroller 和myDataCell 的引用。这样 myDataObject 就有了对 tableviewcontroller 和 myDataCell 的引用。
这里的问题是如何从 myDataCell 调用 handleButtonTouched 事件,并且仍然能够呈现下一个视图控制器,而无需从 myDataCell 访问 myDataObject?还是我必须在 myDataCell 中保留对 myDataObject 的引用?我已经通过上面的委托方法在 myDataObject 中引用了 myDataCell。
- 只声明myDataObjectDelegate,并在tableviewcontroller中实现委托方法。我可以在委托中设置 tableviewcontroller 和 myDataCell 的引用。这样,myDataCell 不必引用其父视图控制器,只有 myDataObject 引用两者。
通过这种方法,我可以做 myDataObject->tableviewcontroller->presentviewcontroller。但是如何将 myDataCell->buttonclick 事件作为触发器呢?我仍然需要将信息从 myDataObject 传递给 myDataCell。
谢谢各位。
编辑:
我忘了提到我经历这些麻烦的目标是我打算将 myDataCell 和 myDataObject 保留在一个框架中。
【问题讨论】:
标签: ios objective-c iphone uitableview