Кнопка "Пользовательское удаление" В редакторе в ячейке UITableView
Я прошел этот вопрос, который показывает следующий код:
-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
return @"Sagar";
}
Что делать, если я хочу создать собственное изображение вместо стандартной кнопки по умолчанию?
Ответы
Ответ 1
luvieere прав - если вы хотите эту же "удалить" метафору, вы хотите сохранить ее на красной кнопке, которую предоставляет Apple. Зачем это менять? Его глобально распознается как стандарт для кнопок удаления.
Хотя, если вы хотите что-то вроде Tweetie, где вы полностью меняете поведение прокрутки, вы можете использовать что-то вроде ABTableViewCell, где вы просто рисуете свое собственное представление. Создайте пользовательский вид таблицы, переопределите -touchesBegan: withEvent:, и проверьте касание. Вычислите дельту двух касаний (в касанияхMoved: withEvent:) и переместите свой собственный вид вокруг.
Ответ 2
Внедрить этот метод в пользовательскую ячейку
- (void)willTransitionToState:(UITableViewCellStateMask)state{
[super willTransitionToState:state];
if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableViewCellStateShowingDeleteConfirmationMask) {
for (UIView *subview in self.subviews) {
if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) {
UIImageView *deleteBtn = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 64, 33)];
[deleteBtn setImage:[UIImage imageNamed:@"delete.png"]];
[[subview.subviews objectAtIndex:0] addSubview:deleteBtn];
[deleteBtn release];
}
}
}
}
Ответ 3
Это поздний ответ, но я надеюсь, что кто-то найдет это полезным. Поэтому принятый ответ кажется для меня сложным, а ответ @user1684899 работает только в том случае, если вы просто хотите изменить внешний вид кнопки удаления. Я хочу полностью изменить внешний вид кнопки удаления (т.е. Ее рамку, положение и т.д.), Поэтому мое решение состоит в том, чтобы добавить мою собственную кнопку удаления в свою пользовательскую ячейку и сохранить ее изначально скрытой и показать ее только тогда, когда ячейка в режиме редактирования. Что еще более важно, я хочу скрыть исходную кнопку удаления iOS и поддерживать обратную совместимость, и вот мой трюк:
- (void)willTransitionToState:(UITableViewCellStateMask)state
{
[super willTransitionToState:state];
if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableViewCellStateShowingDeleteConfirmationMask)
{
if (!IS_IOS_7){
for (UIView *subview in self.subviews)
{
if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"])
{
// hide original button
[[subview.subviews objectAtIndex:0] setHidden:YES];
// show my custom button
[self.deleteButton setHidden:NO];
}
}
} else {
for (UIView *subview in self.subviews) {
for (UIView *subview2 in subview.subviews) {
if ([NSStringFromClass([subview2 class]) rangeOfString:@"Delete"].location != NSNotFound) {
// hide original button
[subview2 setHidden:YES];
// show my custom button
[self.deleteButton setHidden:NO];
}
}
}
}
} else {
// hide my custom button otherwise
[self.deleteButton setHidden:YES];
}
}
И не забудьте добавить:
[cell.deleteButton addTarget:self action:@selector(deleteEntryAtIndexPath:) forControlEvents:UIControlEventTouchUpInside];
в cellForRowAtIndexPath
, чтобы вы могли добавить любую вещь, которую хотите, при нажатии кнопки удаления. Вот мой результат:
Ответ 4
Системный стандарт для предполагаемого действия по переходу на список, как вы сказали в комментарии к ответу luvieere, будет состоять в том, чтобы использовать аксессуар ячейки с раскрытием детали (синий круговой стрелкой), а не жестом салфетки.
Тем не менее, если вы все еще хотите использовать это действие, нет способа предоставить свою собственную кнопку без ручного перехвата и полностью переопределить жестом салфетки, как то, что делает Tweetie.