Estou trabalhando em um projeto no qual tenho que pré-selecionar uma célula específica.
Posso pré-selecionar uma célula usando -willDisplayCell
, mas não posso desmarcá-la quando o usuário clica em qualquer outra célula.
- (void)tableView:(UITableView*)tableView
willDisplayCell:(UITableViewCell*)cell
forRowAtIndexPath:(NSIndexPath*)indexPath
{
AppDelegate_iPad *appDelegte =
(AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
if ([appDelegte.indexPathDelegate row] == [indexPath row])
{
[cell setSelected:YES];
}
}
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
AppDelegate_iPad *appDelegte =
(AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
NSIndexPath *indexpath1 = appDelegte.indexPathDelegate;
appDelegte.indexPathDelegate = indexPath;
[materialTable deselectRowAtIndexPath:indexpath1 animated:NO];
}
Você pode ajudar?
Respostas:
use este código
Swift 3.0:
fonte
willSelectRowAt:
. Veja uma resposta mais completa aqui: stackoverflow.com/questions/12693402/…Use o método a seguir nos delegados da exibição de tabela
didSelectRowAtIndexpath
(ou de qualquer lugar)fonte
indexPathForSelectedRow
é um método e não uma propriedade.[myTable indexPathForSelectedRow]
. Eu estava percorrendo as células antes. Obrigado!Tente o seguinte:
fonte
Pode ser útil fazer uma extensão no Swift para isso.
Swift 4 e Swift 5:
Extensão Swift (por exemplo, em um arquivo UITableViewExtension.swift):
Use, por exemplo:
fonte
viewWillAppear()
método ajuda o usuário a entender de onde ele volta.Por favor, verifique com o método delegado se está correto ou não. Por exemplo;
para
fonte
Swift 4:
fonte
Esta é uma solução para o Swift 4
basta adicionar
Ele funciona como um encanto
exemplo:
fonte
Além de definir a célula como selecionada, você também precisa informar ao tableView que a célula está selecionada. Adicione uma chamada ao
-tableView:selectRowAtIndexPath:animated:scrollPosition:
seuwillDisplayCell:
método: e você poderá desmarcá-la normalmente.Certifique-se de usar UITableViewScrollPositionNone para evitar um comportamento de rolagem estranho.
fonte
[cell setSelected:YES]
poderia ser omitida:selectRowAtIndexPath
vai cuidar da célulaselected
de estadoIsso deve funcionar:
Apenas verifique se materialTable e tableView estão apontando para o mesmo objeto.
Os materiais estão conectados ao tableView no Interface Builder?
fonte
Com base na solução saikirans, escrevi isso, o que me ajudou. No arquivo .m:
E no arquivo de cabeçalho:
Também não sou muito experiente, então verifique se há vazamentos de memória etc.
fonte
Se você deseja selecionar qualquer célula da tabela com o primeiro clique e desmarcar com o segundo, use este código:
fonte
Swift 4:
fonte
self.tableView(tableView, didDeselectRowAt: indexPath)
depoistableView.deselectRow...
porque não foi chamado automaticamenteSwift 2.0:
fonte
tente isso
fonte
coloque esse código de acordo com o seu código e sua célula será desmarcada.
fonte
Você pode tentar isso?
Funcionou para mim.
fonte
Swift 3.0:
Seguindo a seção de conformidade do protocolo do guia de estilo ray wenderlich swift , para manter os métodos relacionados agrupados, coloque esta extensão abaixo da classe do controlador de exibição da seguinte maneira:
fonte
Rápido
fonte
fonte
Swift 3
Também me deparei com isso - quando você navega ou volta à exibição da tabela, geralmente não desmarca a linha selecionada anteriormente para você. Coloquei esse código no controlador de exibição de tabela e funciona bem:
fonte
Swift 3/4
No ViewController:
Na célula personalizada:
fonte
swift 3.0
fonte
Para desmarcar (DidDeselectRowAt) disparar quando clicado pela primeira vez devido a dados pré-carregados; você precisa informar ao tableView que a linha já está selecionada para começar, para que um clique inicial desmarque a linha:
// Swift 3:
fonte
O que eu descobri é que, além de definir a célula como selecionada , você deve informar a exibição da tabela para selecionar a linha no caminho do índice fornecido.
fonte