У меня возникла проблема. Обычно, имея дело с UITableView, я создам специальный метод , configureCell, который строит ячейки, поскольку tableView нуждается в них. Поэтому cellForRowAtIndexPath запрашивает configureCell для получения новой ячейки, если в кэше не найдено ни одного.UITableView с единой пользовательской ячейкой? (iPhone)
В части cellForRowAtIndexPath, что вызывается каждый раз, когда пользователь прокручивает:
- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [theTableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
[self configureCell:cell atIndexPath:indexPath];
}
//this part is always executed!
}
я установить значение меток и т.д. из моей модели. Это прекрасно работает, и я считаю, что это должно быть правильно работать и быть наименее напряженным для процессора. Из того, что я могу прочитать в TableView Guide.
Моя проблема в том, что первая ячейка в моем таблицеView отличается от остальных. У меня есть специальная иконка и другие вещи, которые отделяют ее от других ячеек.
В моем конфигурировании камеры я потом пытался спрашивать:
if (indexPath.row == 0) {
//do special setup!
}
Это плохая идея, так как ленивая нагрузка Tableview клетки и, следовательно, первая ячейку, которая находится за пределами экрана, когда время прокручивается на экране, также получит indexPath.row = 0
, так что теперь у меня есть «специальная ячейка» для каждых 7 ячеек. Как мне обойти эту?
Вторая проблема, которая также возникает из-за вышеизложенного: у меня есть таможня UIView
, размещенная во всех ячейках accessoryView
. Когда пользователь нажимает кнопку «Изменить», все элементы аксессуаров cells должны появляться на значке, указывающем, что мы находимся в «режиме редактирования». Здесь, опять же, это происходит только для ячеек на экране, когда прокрутка «старых» ячеек вызывается из кеша или создаются новые ячейки, которые не знают, что мы находимся в режиме редактирования.
Когда вы нажимаете на ячейку, никогда не возникает сомнений в том, что ячейка выбрана, этот индекс вам нужно связать с вашим модельным массивом, чтобы выяснить, что пользователь нажал. Но, похоже, применяются разные правила, когда TableView манипулирует ячейками (вытягивая их на экране, за пределами экрана, удаляя, добавляя).
Я думаю, я спрашиваю; следовать лучшей практике, а не бороться с SDK, что мне делать, чтобы получить желаемую функциональность и на каком этапе жизненного цикла Cell я должен применить эту логику?
Надежда кто-то может вести меня в правильном направлении :) спасибо заранее :)
Какой стиль TableViewController вы используете? –
Ahh не видел вашего вопроса там Роб. Это UITableView, который я вручную добавил в UIViewController. Он не использует разделы. вот так: self.tableView = [[[UITableView alloc] initWithFrame: self.view.bounds] autorelease]; Ответит ли это на ваш вопрос? – RickiG
Просто сменил его на: \t self.tableView = [[[UITableView alloc] initWithFrame: self.view.bounds style: UITableViewStylePlain] autorelease]; Уверен :) – RickiG