Botão de exclusão personalizada na edição na célula UitableView
-
06-07-2019 - |
Pergunta
Eu passei por essa questão que mostra o seguinte código:
-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
return @"Sagar";
}
E se eu quiser uma imagem personalizada em vez do botão vermelho padrão?
Solução
Luvieere está certo - se você deseja a mesma metáfora "excluir", deseja mantê -la no botão vermelho que a Apple fornece. Por que mudar isso? É globalmente reconhecível como o padrão Para botões de exclusão.
Embora, se você quiser algo como Tweetie, onde você completamente Mudar o comportamento de deslizar, você pode usar algo como o AbtableViewCell, onde você acabou de desenhar em sua própria opinião. Faça uma exibição de tabela personalizada, substitua -TouchesBegan: WithEvent: e verifique se há toques. Calcule o delta dos dois toques (em TouchesMoved: WithEvent :) e mova sua própria visão.
Outras dicas
Implementar este método na célula personalizada
- (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];
}
}
}
}
Esta é uma resposta tardia, mas espero que alguém possa achar isso útil. Portanto, a resposta aceita parece meio complicada para mim, e a resposta do @user1684899 só funciona se você quiser alterar a aparência do botão Excluir. Quero alterar completamente a aparência do botão Excluir (ou seja, sua moldura, posição etc.), então minha solução é adicionar meu próprio botão de exclusão à minha célula personalizada e mantê -la inicialmente escondida, e apenas mostrá -la quando a célula estiver no modo de edição. O que é mais importante, quero ocultar o botão Excluir original do iOS e suportar compatibilidade com versões anteriores, e aqui está o meu truque:
- (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];
}
}
E não se esqueça de acrescentar:
[cell.deleteButton addTarget:self action:@selector(deleteEntryAtIndexPath:) forControlEvents:UIControlEventTouchUpInside];
dentro cellForRowAtIndexPath
, para que você possa adicionar tudo o que quiser quando o botão Excluir for clicado. Aqui está o meu resultado:
O padrão em todo o sistema para a ação pretendida de mergulho na lista, como você disse no comentário sobre a resposta de Luvieere, seria usar o acessório de células de divulgação detalhada (seta circulante azul), não o gesto de deslizamento.
Dito isto, se você ainda deseja usar a ação de furto para isso, não há como fornecer seu próprio botão sem interceptar e reimplementar completamente o gesto de furto, como o que Tweetie faz.