Это должно быть легко, но это поставило меня в тупик. У меня есть кнопка в каждой строке ячейки таблицы. Кнопка предназначена для удаления файла, связанного с этой строкой. У меня есть изображение, которое указывает, присутствует ли файл на iPhone или нет.
Когда пользователь нажимает кнопку, метод целевого действия (showDeleteSheet) затем вызывает UIActionSheet с переменной, чтобы указать indexPath нажатой строки. Затем пользователь нажимает кнопку «Удалить» в листе действий, и метод clickedButtonAtIndex листа действий удаляет файл.
Теперь мне нужно обновить свойство фонового изображения кнопки, чтобы изменить изображение в соответствующей ячейке таблицы на незагруженное изображение. Это можно сделать либо в методе целевого действия кнопки, либо в методе clickedButtonAtIndex листа действий.
Вот код:
В методе таблицы cellForRowAtIndexPath я создаю кнопку:
UIButton *deleteButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
[deleteButton addTarget:self action:@selector(showDeleteSheet:) forControlEvents:UIControlEventTouchDown];
deleteButton.frame = CGRectMake(246, 26, 30, 30);
if (![AppData isDownloaded:[dets objectForKey:@"fileName"]]) {
[deleteButton setBackgroundImage:notdownloadedImage forState:UIControlStateNormal];
} else {
[deleteButton setBackgroundImage:notdownloadedImage forState:UIControlStateNormal];
}
В целевом методе кнопки:
-(void)showDeleteSheet:(id)sender {
//get the cell row that the button is in
NSIndexPath *indexPath = [table indexPathForCell:(UITableViewCell *)[[sender superview] superview]];
NSInteger currentSection = indexPath.section;
NSInteger currentIndexRow = indexPath.row;
NSLog(@"section = %i row = %i", currentSection, currentIndexRow);
UIButton *deleteButton = [UIButton buttonWithType:UIButtonTypeCustom];
[table reloadData];
//if deleteButton is declared in .h then the other instances of deleteButton show 'local declaration hides instance variable'
[deleteButton setBackgroundImage:[UIImage imageNamed:@"not-downloaded.png"] forState:UIControlStateNormal];
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Delete this file?"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:@"Delete"
otherButtonTitles:nil];
actionSheet.tag = currentIndexRow;
actionSheet.actionSheetStyle = UIActionSheetStyleDefault;
[actionSheet showInView:self.view];
[actionSheet release];
}
Возможно, проблема в том, что вызов [deleteButton setBackgroundImage...]; не знает, какая кнопка ячейки должна быть обновлена. Если да, то я не знаю, как сказать, какой.
Поскольку я проверяю, загружен ли файл, когда кнопка сделана и фоновое изображение установлено, когда я прокручиваю вниз, чтобы рассматриваемая ячейка была удалена из очереди, а затем прокручивала обратно вверх, она показывает правильное изображение.
Я пытался принудительно перезагрузить таблицу, но [table reloadData]; ничего не делает. Я пробовал reloadRowsAtIndexPaths и все равно ничего не получалось.
Кто-нибудь хочет обучить меня тому, как это делается?