Смущен из-за UITableView numberOfRowsInSection синтаксис - PullRequest
0 голосов
/ 12 апреля 2011

У меня есть представление вкладок, которое загружает представление таблиц для каждой вкладки

Интерфейс первой вкладки объявляет UITableView * tableView; Интерфейс второй вкладки объявляет UITableView * favTableView;

При объявлении количества строк для второй таблицы это работает:

- (NSInteger)tableView:(UITableView *)favTableView numberOfRowsInSection:(NSInteger)section {
    return [favList count];
}

Но если я поменяю его на:

- (NSInteger)favTableView:(UITableView *)favTableView numberOfRowsInSection:(NSInteger)section {
    return [favList count];
}

приложение вылетает при попытке загрузить вторую вкладку

Является ли моя ошибка (а) непониманием того, что является переменным / зарезервированным словом, (б) присвоением каждой таблице уникального идентификатора, например favTableView, вместо повторного использования tableView.

Также вторая таблица не имеет строки заголовка

Ответы [ 2 ]

5 голосов
/ 12 апреля 2011

Метод делегата, который вы должны реализовать:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

В этом прототипе метода tableView: (обратите внимание на двоеточие) - это фиксированное имя, которое нельзя изменить. Второй экземпляр tableView - это просто имя локальной переменной, которое имеет значение в методе. Следующее также будет действительным:

-(NSInteger)tableView:(UITableView *)tv numberOfRowsInSection:(NSInteger)section

Имена методов делегатов такие, какие они есть. Вы не можете решить, что хотите, чтобы имена методов делегата были чем-то другим, или как UITableView узнает, какие методы нужно вызывать, когда ему нужна информация от его делегата?

Таким образом, для вашей таблицы favTableView, если вы указали объект, который реализует вышеуказанный метод делегата, как делегат favTableView, то при вызове локальной переменной tv фактически будет таким же, как favTableView.

Я вижу, где вы будете смущены по этому поводу. SDK использует tableView для многих вещей: имен местозаполнителей прототипов методов, имен переменных и кто знает, что еще. Это сводится к способности читать и понимать сигнатуры метода Objective-C. :-) Это немного странно, пока ты к этому не привыкнешь.

0 голосов
/ 12 апреля 2011

Делегат, вероятно, использует предварительно заданные имена методов, как вы указали. Не должно быть функциональной проблемы с отказом от повторного использования tableView, так как вы, вероятно, все равно повторно используете favTableView. Строка заголовка должна быть решена путем ручной установки свойств для заголовка в вашем пользовательском tableView. Если вы ищете заголовки, вы должны установить свойства для высоты и размера.

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