Разные изображения в табличном представлении?

#iphone #cocoa-touch #uitableview #uiimageview

#iPhone #cocoa-touch #uitableview #uiimageview

Вопрос:

Я новичок в форуме, и мне нужна помощь. У меня есть табличное представление, и я могу добавлять к нему ячейки с помощью разных кнопок на отдельной странице. Я хочу, чтобы каждая кнопка добавляла новую ячейку, но с другим изображением. Так, например. Кнопка 1 добавит ячейку, а изображение с именем @"button1.png" кнопка два добавит ячейку с именем изображения @"button2.png" и так далее. Но у меня возникли проблемы с добавлением изображения в ячейку. Я могу сделать это в cellForRow , но не в методе кнопки. Кто-нибудь, пожалуйста, может мне помочь? Я пробовал это в кнопках:

Кнопка РЕДАКТИРОВАНИЯ, используемая для добавления ячейки и изображения:

 - (IBAction)outlet1:(id)sender {
[cart.cells addObject:@"1"];
[cart.cell.imageView setImage:[UIImage imageNamed:@"paddle1.png"]];
}
  

cellForRow

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:   
(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault     
reuseIdentifier:CellIdentifier];
} 
//cell.imageView.image = [UIImage imageNamed:@"paddle1.png"];
[myTableView reloadRowsAtIndexPaths:indexPath.row   
withRowAnimation:UITableViewRowAnimationNone];

cell.textLabel.text = [cells objectAtIndex:indexPath.row];
return cell;
}
  

Ответ №1:

Способ визуализации UITableView заключается в том, что он запрашивает ячейку для строки всякий раз, когда собирается отобразить эту строку, генерирует нужные пиксели, а затем забывает о ячейке. Поскольку большая часть структуры ячейки не меняется от строки к строке, существует возможность повторно использовать один и тот же объект cell для отображения нескольких строк и просто (например) изменить текст метки или изображение ImageView.

Следовательно, изменение ячейки после отображения строки не изменяет внешний вид строки. Вам нужно указать таблице повторно отобразить эту строку:

 [myTable reloadRowsAtIndexPaths:indexPathArray withRowAnimation:foo];
  

Это приведет к тому, что ОС вызовет сообщение делегата источника данных TableView cellForRowAtIndexPath: , которое затем должно создать и / или изменить ячейку, которая затем отображается.

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

Комментарии:

1. итак, когда вызывается этот метод, он перезагружает строки таблицы и позволяет мне добавлять новые изображения в строки tableview? Кроме того, что я должен заменить foo ? Большое спасибо за ответ, Андрей! 🙂

2. Вызовите метод с indexPathArray, который включает индексные пути к строкам, которые вы хотите изменить. Что касается ‘foo’, выберите нужную анимацию строки, например UITableViewRowAnimationNone, если вы просто хотите, чтобы она немедленно перерисовывалась. Для получения дополнительной информации ознакомьтесь с документацией по этому сообщению.

3. хорошо, поэтому я помещаю это в cellForRow с помощью этого кода: [myTableView reloadRowsAtIndexPaths:indexPath.row withRowAnimation:UITableViewRowAnimationNone]; и он по-прежнему не позволяет добавлять изображение. И если я добавлю более 1 ячейки, а затем попытаюсь перейти на страницу просмотра таблицы, приложение выйдет из строя. Здесь не могли бы вы, пожалуйста, прочитать мой код в моем вопросе, я исправлю это и покажу, что у меня есть сейчас. Большое спасибо за всю помощь!!

4. этот первый параметр — это массив, который вам нужен [myTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]; , что может привести к сбою. Если вам нужно несколько строк, используйте другое сообщение инициализатора массива.

5. привет, Эндрю, я ценю помощь, но это совсем не то, что я ищу, я думаю. Это заставляет мой табличный вид делать кучу странных вещей. Вы видели приложение Amazon для iphone / ipad? Я хочу то же самое, что и при добавлении чего-либо в корзину для его покупки. Я хочу, чтобы вместе с изображением продуктов отображалась ячейка. Не могли бы вы помочь мне с этим, пожалуйста? Большое спасибо!

Ответ №2:

Если я понимаю проблему, вы хотите, чтобы объект cart отображал свое изображение в ячейке таблицы. Если это так, то почему бы вам не добавить представление UIImage к объекту cart. В соответствующее время (где-то, где объект выбирается пользователем) сохраните изображение элемента в своем представлении UIImage объекта. Затем, когда вы переходите к установке объекта корзины в свою таблицу, у вас есть имя объекта (предположительно) и его изображение в вашем объекте, и затем вы можете легко установить изображение ячейки = на изображение ваших объектов. Не пытайтесь определить логику отображения изображения внутри метода «cellForRowAtIndexPath». Сохраните изображение и все атрибуты вашего объекта и используйте objectAtIndex, чтобы указать на ваш полный объект и задать ячейку на основе атрибутов ваших объектов.

Комментарии:

1. Привет, большое спасибо за ответ!! А объект cart — это просто копия класса. А что касается добавления изображения в нужное время, разве мой код не будет работать выше? Я прошу пользователя нажать кнопку, а затем добавить ее, когда она добавит ячейку / строку? Вы продолжаете говорить об объекте корзины. Что вы имеете в виду под этим? Как вы думаете, что такое корзина? потому что я не уверен, как это выразить, но cart просто относится к другому классу

2. Вы поняли это?

3. Да, я уверен, я просто добавил изображения в массив, подобный тексту для ячейки. И это сработало идеально! Спасибо за помощь!