UITableView: программно установить источник данных - PullRequest
3 голосов
/ 30 июля 2010

В моем приложении для iPhone у меня есть UIViewController, который имеет UITableView и другой UIView, в своем файле xib, представление xib содержит и UITableView, и другой UIView. Оба представления связаны как IBOutlets с соответствующими представлениями в xib-файле. Когда я хочу программно установить источник данных для UITableView, я создаю такой метод в UIViewController:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil tableDataSource:(id)dataSource{
if ((self = [self initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
    // Custom initialization
    self.inventoryTableView.dataSource = dataSource;
    //[self.inventoryTableView reloadData];
}
return self;}

и затем я реализую следующие методы в другом моем классе, назовем его B:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

Наконец, я выделяю + init B и передаю экземпляр методу initWithNibName:bundle:tableDataSource:, создающему UIViewController. Все представления отображаются в симуляторе, но методы источника данных, по-видимому, не вызываются. Я делаю нечто подобное с другим контроллером и работает, но это UITableViewController, а TableView - это представление контроллера. Возможно ли, что, будучи подпредставлением, я должен установить источник данных в другом методе, отличном от initWithNib?

UPDATE: Поместив назначение источника данных в метод viewDidLoad:, я смог решить его. Мне кажется, что даже после вызова [self initWithNibName:nibNameOrNil bundle:nibBundleOrNil] дочерние представления основного представления не запускаются должным образом

Ответы [ 2 ]

2 голосов
/ 30 июля 2010

Взгляните на этот ответ, я думаю, что он похож на то, что вы предлагаете, используя «B» в качестве внешнего источника данных для контроллера.

Простой способ отделения источника данных UITableview и делегата от основного класса UIViewController?

0 голосов
/ 07 августа 2010

Как сказано в обновлении и в комментарии, я решил, изменив, где установить делегат / источник данных, потому что нужно было ждать, пока tableView будет выделен и инициирован. Мне кажется, что в качестве подпредставления оно выделяется / инициируется позже, чем основное представление класса

...