TableView не загружается внутри UINavigationController - PullRequest
0 голосов
/ 22 мая 2011

У меня проблема с загрузкой данных в UITableView.

Моя реализация следующая:

@interface FirstViewController : UINavigationController <UIActionSheetDelegate, UITableViewDelegate> {

    UITableViewController *tableViewController;        
    UITableView *table;    
}   
@end

И viewDidLoad Метод:

- (void)viewDidLoad {    
    [super viewDidLoad]; 
    tableViewController = [[UITableViewController alloc] init];
    table = [[UITableView alloc] init];
    tableViewController.tableView = table;
    [tableViewController.tableView setDelegate:self];

    self.newsList = [NSMutableArray array];
    tableViewController.tableView.rowHeight = 130.0;

    [self addObserver:self forKeyPath:@"newsList" options:0 context:NULL];    
    [self pushViewController:tableViewController animated:NO];

}

ИЯ не могу понять, что не так.Может быть, данные не будут загружаться, потому что я добавляю наблюдателя?

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context
{
    [tableViewController.tableView reloadData];
}

Спасибо за любой совет!

Ответы [ 2 ]

2 голосов
/ 22 мая 2011

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

viewDidLoad - это хорошее время для загрузки (что вы и сделали) и плохое время для поведения, например, для продвижения представления.

Вы можете попробовать переместить деталь pushViewController в -viewDidAppear:animated:. это должно дать вам представление таблицы, но оно все равно будет вести себя немного забавно, потому что у вас будет кнопка «Назад», которая заставит таблицу исчезнуть, а затем сразу же нажать ее снова.

Лучший способ сделать это - установить контроллер табличного представления в качестве корневого контроллера представления навигационного контроллера.

UPDATE:

Похоже, что здесь размыто то, что контроллер должен делать.

Контроллер панели вкладок:

не делите его на подклассы, поместите контроллер вида навигации в качестве одной из вкладок. Я думаю, вы уже правильно поняли эту часть.

Контроллер навигации

Не делайте его на подклассы, инициализируйте его с вашим контроллером табличного представления в качестве корневого контроллера представления. Если вы не пытаетесь заставить контроллер навигации делать что-то совершенно отличное от того, что он обычно делает, редко возникает необходимость в его подклассе.

Контроллер табличного представления

Подкласс этого . Это делает 90% дополнительной работы за вас, все, что вам нужно сделать, это написать реализацию для источника данных и делегировать методы.

Поначалу это может показаться смешным, потому что вам нужно инициализировать их в обратном порядке. Делегат приложения должен запустить контроллер табличного представления, затем инициализировать контроллер навигации с контроллером табличного представления в качестве пользователя root, а затем инициализировать контроллер панели вкладок с контроллером навигации в качестве одной из вкладок. Сначала это сложный стек контроллеров.

1 голос
/ 22 мая 2011

Возможно, вы забыли одну маленькую вещь, dataSource.

[tableViewController.tableView setDataSource:self];

Добавьте это после setDelegate: метода.

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