UITableView делегат методов не вызывается - PullRequest
0 голосов
/ 09 августа 2011

Я создал UITableViewController в подклассе UIViewController и настроил методы делегата, но методы делегата источника данных не вызываются (путем просмотра журналов). Нужно ли создавать подкласс UITableViewController? Что я пропустил?

В MyViewController.h

@interface MyViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
UITableViewController *myTableViewController;
}
@property (nonatomic, assign) UITableViewController *myTableViewController;

In MyViewController.m

- (void)viewDidLoad
{
    myTableViewController = [[UITableViewController alloc]initWithStyle:UITableViewStylePlain];
    myTableViewController.tableView.delegate = self;

}

- (NSInteger)tableView:(UITableView *)tableView
 numberOfRowsInSection:(NSInteger)section {
    NSLog(@"numberOfRowsInSection");
    return [self.assets count]; //assets is NSMutableArray
}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSLog(@"cellForRowAtIndexPath");
    static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
                             SimpleTableIdentifier];
    if (!cell) {
        cell = [[[UITableViewCell alloc]
                 initWithStyle:UITableViewCellStyleDefault
                 reuseIdentifier:SimpleTableIdentifier] autorelease];
    }
    NSUInteger row = [indexPath row];
    cell.textLabel.text = [assets objectAtIndex:row];  //assets is NSMutableArray
    cell.textLabel.font = [UIFont boldSystemFontOfSize:50];
    return cell;
}

Я вызвал табличное представление из другого класса:

UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:myTableViewController];

Ответы [ 2 ]

5 голосов
/ 09 августа 2011

A UITableViewController сам по себе является контроллером представления. Таким образом, вы обычно не создадите его в контроллере вида viewDidLoad. Обычно вы либо создаете UITableView, либо подкласс UITableViewController и позволяете ему беспокоиться о создании и настройке соответствующего представления.

Даже если вы создаете контроллер представления, а затем перехватываете его представление для подключения к вам как к делегату, вы не можете отобразить это представление. Поскольку представление никогда не отображается, ему никогда не нужно разговаривать с его делегатом. Вы, вероятно, намеревались добавить соответствующий вид к своему собственному в viewDidLoad.

Наконец, два реализованных вами метода являются частью UITableViewDataSource, а не UITableViewDelegate. Источник данных предоставляет содержимое таблицы, делегат получает информацию о касаниях и других связанных событиях. Таким образом, вы, вероятно, хотите установить себя в качестве источника данных, а не делегата.

0 голосов
/ 09 августа 2011

В моем исходном коде отсутствуют две вещи: 1. В MyViewController.h создайте переменную табличного представления. 2. Перетащите объект табличного представления в IB в главное окно (не любое представление) и сделайте делегат, источник данных и представление владельцем файла. (обратите внимание, что представление объекта табличного представления должно будет соединиться с переменной табличного представления, которую вы создали в шаге 1.) 3. Добавьте эту строку в метод viewDidLoad: myTableViewController.tableView = tView; // tView - это табличное представление, которое вы создали в шаге 1.

Или вы также можете создать подкласс UITableViewController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...