无法将UITableViewController连接到在xib中创建的UITableView

时间:2014-08-19 22:33:15

标签: ios objective-c uitableview xib

是另一个UITableView问题。我有一个MainPageController子类UIViewController,我在界面构建器中将UITableView拖到我的xib中。我创建了一个单独的控制器(没有xib)专门处理UITableView和其他UITableViews之类的操作。我们说它名为CustomTableViewController。它是UITableViewController的子类,符合UITableViewDataSource

现在,在我的MainPageController中,我想创建一个CustomTableViewController的实例并让它"控制"我在MainPageController的xib中的UITableView实例。如何才能做到这一点?我对我的CustomTableViewController上的tableView属性以及如何让myTableViewmyCustomTableViewController相互连接感到困惑。

我尝试过像myTableView.dataSource = myCustomTableViewController;这样的事情,但似乎没有任何事情发生。我甚至没有调用我的dataSource方法。

我正在关注此设计,因为我想将自定义控制器重用于我将在其他页面上使用的其他表视图。

2 个答案:

答案 0 :(得分:1)

我对此进行了测试,发现它正常工作。这是应该做的 -

1)在MainPageController中,创建一个IBOutlet属性tableView并将其与MainPageController xib挂钩。

2)在MainPageController中,在viewDidLoad中创建CustomTableViewController的实例,并将数据源设置为CustomTableViewController实例 -

self.myCustomTableTableViewController = [[CustomTableViewController alloc] init];
self.tableView.dataSource = self.myCustomTableTableViewController;

这应该足以实现你所描述的内容。

MainPageController.h

    #import <UIKit/UIKit.h>

    @interface MainPageController : UIViewController

     @property (strong, nonatomic) IBOutlet UITableView *tableView;

   @end

MainPageController.m

   #import "MainPageController.h"
   #import "CustomTableViewController.h"
   @interface ViewController ()
   @property (strong, nonatomic) CustomTableViewController *customTableViewController;

   @end

   @implementation MainPageController

   - (void)viewDidLoad
   {
       [super viewDidLoad];
       // Do any additional setup after loading the view, typically from a nib.
       self.customTableViewController = [[CustomTableViewController alloc] init];
       self.tableView.dataSource = self.customTableViewController;
   }
   @end

答案 1 :(得分:0)

UITableViewController的_tableView是固有的。即使您使用xib创建一个新类,您也会注意到整个视图是一个tableview。当您将UITableView拖动到xib文件或故事板上的控制器中时,您只是创建一个自定义UITableView,并且您无法告诉它响应另一个控制器。我现在能想到的最简单的模式是:

  1. CustomTableViewController应该是UIViewController的子类。在其中定义所有数据源函数。不要使用xib。

  2. 因为它是一个UIViewController,你可以为tableView添加一个IBOutlet。当您创建MainPageController的子类时,使其成为CustomTableViewController的子类,并设置tableView出口。

  3. 在IB中,将ViewController中UITableView的数据源和委托设置为类。它应该符合,因为它是CustomTableViewController的子类。