UIButton, добавленный в UITableViewCell, не будет отображаться - PullRequest
0 голосов
/ 23 февраля 2011

Прочитав все примеры здесь и в других местах, я написал следующий код для добавления кнопки в UITableViewCell, но не могу отобразить ее в ячейке.Что я делаю не так?

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

   static NSString *CellIdentifier = @"Cell";

   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   if (cell == nil) {
       cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
   }

UIButton *cellButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[cellButton setFrame:CGRectMake(0.0f, 5.0f, tableView.frame.size.width-2, 44.0f)];
[cellButton setTitle:[aList objectAtIndex:indexPath.row] forState:UIControlStateNormal];
[cell.contentView addSubview:cellButton];
[cellButton release];
return cell;
}   

Спасибо, Джон

Ответы [ 2 ]

6 голосов
/ 23 февраля 2011

Нет необходимости звонить release на кнопку, которую вы создали с помощью buttonWithType;вызывая команду release, вы заставляете счет удержания уменьшаться, и в какой-то момент кнопка будет уничтожена раньше, чем вы захотите.

2 голосов
/ 23 февраля 2011

Вы делаете две вещи неправильно. Во-первых, как было сказано выше, вы переиздаваете кнопку, и в будущем может произойти сбой программы. Как правило, статические методы возвращают автоматически выпущенные объекты, поэтому вам не нужно выпускать их самостоятельно (если вы не сохранили их заранее).

Кроме того, поскольку вы повторно используете табличную ячейку, приведенный выше код добавит UIB-кнопку в ячейку несколько раз, что, вероятно, не является вашим желаемым поведением. Добавьте UIButton при инициализации ячейки таблицы. Кроме того, вы можете убедиться, что прямоугольник кнопки находится внутри ячейки таблицы для проверки работоспособности.

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

   static NSString *CellIdentifier = @"Cell";

   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   if (cell == nil) {
       cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];

UIButton *cellButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[cellButton setFrame:CGRectMake(0.0f, 5.0f, tableView.frame.size.width-2, 44.0f)];
[cellButton setTitle:[aList objectAtIndex:indexPath.row] forState:UIControlStateNormal];      
[cell addSubview:cellButton];
   }

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