我正在尝试在开发iOS应用程序时遵循MVC模型,并且在这里遇到问题:如何从tableviewcell而不是其父tableviewcontroller触发viewcontroller。 PresentViewController只能从ViewController调用。

情况如下:

  • 我在后端myDataObject处有一个数据对象;
  • 我也有一个tableview,在其中我用MyDataObject的实例填充了一种类型的表视图单元myDataCell。
  • 现在,我想以编程方式(而不是segue)从myDataCell中的UIButton click事件触发另一个ViewController。

  • 我的目标是尽可能避免MVC的耦合,方法是避免每个对象都保留指向其他两个对象的指针,例如,我不希望该单元格保留MyDataObject的引用,也不希望它保持引用它的tableviewcontroller。

    以下是如何处理这种情况以及面临的挑战的几种方案:
  • 声明myDataCellDelegate和myDataObjectDelegate,从tableviewcontroller中的两个委托声明中实现方法,并在委托中设置tableviewcontroller和myDataCell的引用。这样,myDataObject可以引用tableviewcontroller和myDataCell。

  • 这里的问题是如何从myDataCell调用handleButtonTouched事件,并且仍然能够呈现下一个viewcontroller,而无需从myDataCell访问myDataObject?还是我必须在myDataCell中保留对myDataObject的引用?我已经从上面的委托方法中获得了myDataObject中myDataCell的引用。
  • 仅声明myDataObjectDelegate,并在tableviewcontroller中实现委托方法。我可以在委托中设置tableviewcontroller和myDataCell的引用。这样,myDataCell不必引用其父viewcontroller,只有myDataObject引用两者。

  • 通过这种方法,我可以执行myDataObject-> tableviewcontroller-> presentviewcontroller。但是,如何使myDataCell-> buttonclick事件作为触发器?我仍然需要将信息从myDataObject传递到myDataCell。

    多谢你们。

    编辑:

    我忘了提到我遇到这种麻烦的目标是我打算将myDataCell和myDataObject保留在框架中。

    最佳答案

    单元格是MVC中的视图。控制器必须执行逻辑,这是中间步骤。
    在那种情况下,我总是创建一个自定义委托,类似于UItableviewcellDelegate,类似于showThisVC:(UITableViewCell)cell,您可以很容易地获得行号,因为您知道控制器中的单元格。

    关于ios - 如何从UITableViewCell呈现 View Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26288168/

    10-13 03:49