Estou usando um UITableViewCell de desenho personalizado, incluindo o mesmo para a célula accessoryView
. Minha configuração para o acessórioView acontece da seguinte maneira:
UIImage *accessoryImage = [UIImage imageNamed:@"accessoryDisclosure.png"];
UIImageView *accImageView = [[UIImageView alloc] initWithImage:accessoryImage];
accImageView.userInteractionEnabled = YES;
[accImageView setFrame:CGRectMake(0, 0, 28.0, 28.0)];
self.accessoryView = accImageView;
[accImageView release];
Além disso, quando a célula é inicializada, o uso de initWithFrame:reuseIdentifier:
I garantiu a configuração da seguinte propriedade:
self.userInteractionEnabled = YES;
Infelizmente no meu UITableViewDelegate, meu tableView:accessoryButtonTappedForRowWithIndexPath:
método (tente repetir 10 vezes) não está sendo acionado. O delegado está definitivamente conectado corretamente.
O que pode estar faltando?
Obrigado a todos.
self.tableView
. e se você não souber qual tableview contém a linha?Achei este site muito útil: visualização de acessórios personalizados para a sua visualização uitabl no iphone
Em resumo, use isso em
cellForRowAtIndexPath:
:em seguida, implemente este método:
fonte
Minha abordagem é criar uma
UITableViewCell
subclasse e encapsular a lógica que chamará oUITableViewDelegate
método usual dentro dela.fonte
button.superview
,cell.superview
e[tableView.delegate tableView:...]
não são seguros o suficiente.Uma extensão da resposta de Jim Dovey acima:
Tenha cuidado ao usar um UISearchBarController com seu UITableView. Nesse caso, você deseja verificar
self.searchDisplayController.active
e usar emself.searchDisplayController.searchResultsTableView
vez deself.tableView
. Caso contrário, você obterá resultados inesperados quando o searchDisplayController estiver ativo, especialmente quando os resultados da pesquisa forem rolados.Por exemplo:
fonte
Defina uma macro para tags de botões:
Botão Criar e defina o cell.accessoryView ao criar uma célula
Defina cell.accessoryView.tag por indexPath no método UITableViewDataSource -tableView: cellForRowAtIndexPath:
Manipulador de eventos para botões
Implemente o método UITableViewDelegate
fonte
tag
menos que seja absolutamente necessário, procure outra solução.Quando o botão é tocado, você pode chamar o método a seguir dentro de uma subclasse UITableViewCell
fonte
Com a abordagem yanchenko, eu tive que adicionar:
[accBtn setFrame:CGRectMake(0, 0, 20, 20)];
Se você estiver usando o arquivo xib para personalizar seu tableCell, o initWithStyle: reuseIdentifier: não será chamado.
Em vez disso, substitua:
fonte
Você deve usar a
UIControl
para obter corretamente o envio de eventos (por exemplo, aUIButton
) em vez de simplesUIView/UIImageView
.fonte
Swift 5
Essa abordagem usa o
UIButton.tag
para armazenar o indexPath usando deslocamento de bits básico. A abordagem funcionará em sistemas de 32 e 64 bits, desde que você não tenha mais de 65535 seções ou linhas.fonte
No iOS 3.2, você pode evitar os botões recomendados pelos outros aqui e, em vez disso, usar o UIImageView com um reconhecedor de gestos. Certifique-se de ativar a interação do usuário, que está desativada por padrão no UIImageViews.
fonte