永远不会调用自定义UITableViewController的didSelectRowAtIndexPath

时间:2012-08-06 06:17:52

标签: objective-c ios uitableview

我目前正在开发一个iOS项目,我对它很陌生。

  1. 我的问题描述: 我编写了自己的TableView(包含UITableView的UITableViewController的派生)。不幸的是,从未调用过“didSelectRowAtIndexPath”方法。我仍然可以滚动TableView - 我只是不能选择一行!

  2. 我的项目描述(-structure):

    MyAppDelegate - 包含MyWindow

    MyWindow - 使用MyRootViewController

    MyRootViewController - 包含MyFirstViewController

    MyRootViewController - 包含MySecondViewController

    MyFirstViewController - 仅包含视图和一些按钮和标签作为起始视图。

    MyFirstViewController - 实施ViewMediator

    MySecondViewController - 包含MyTableViewController

    MySecondViewController - 实施ViewMediator

    ViewMediator - 让视图在不相互了解的情况下进行通信的协议

    MyTableViewController - 来自UITableViewController

    MyTableViewController - 包含UITableView(在构造函数中制作)

    MyTableViewController - 覆盖cellForRowAtIndexPath(这样可行,因此会显示元素)

    MyTableViewController - 覆盖didSelectRowAtIndexPath(永远不会被调用)

    MyTableViewController - 包含MyTableViewModel

    MyTableViewModel - 只是一个读取文件并将数据加载到TableView

  3. 的类
  4. 我已经尝试过:

    • 3.1手动将“MyTableViewController”设置为包含UITableView的委托 - 即使这应该自动完成。
    • 3.2在“MyTableViewController”之外创建UITableView,然后将其设置为“MyTableViewController.view”和/或“MyTableViewController.tableView”。
    • 3.3我在UITableView中手动启用了UserInteraction。认为这不是真正的问题,因为滚动工作正常。
  5. 有趣的事实:它之前有效,我只是对ViewControllers的通信添加了一些小改动。在他们直接沟通(单向)之前,现在他们通过调解员(双向)进行交流 - 众所周知的调解员模式。这不应该影响视图及其控制器,对吗?

1 个答案:

答案 0 :(得分:0)

除了将表视图控制器指定为表视图的委托之外,还需要视图控制器的view属性完全是您的tableView。

如果您想要一个单独的视图和一个表视图作为其子视图(允许其他子视图),您将必须子类UIViewController而不是UITableViewController