Eu sou um novato em desenvolvimento iOS. Quero adicionar uma marca de seleção ao meu UITableViewCell
quando ele for selecionado. A marca de seleção deve ser removida quando outra linha for selecionada. Como eu faria isso?
ios
uitableview
Suchi
fonte
fonte
Em seu método UITableViewDatasource:
E lastIndexPath é um
property(strong) NSIndexPath* lastIndexPath;
fonte
Descobri que recarregar os dados interrompe a animação desmarcada de uma maneira desagradável.
Esta implementação do Swift adiciona / remove claramente as marcas de verificação e desmarca a linha:
onde
lastSelection
é declarado comovar lastSelection: NSIndexPath!
Nenhuma atividade extra é
cellForRowAtIndexPath
necessária. Não deve ser difícil de replicar em Obj-C.fonte
Para definir uma marca de seleção:
Para selecionar / desmarcar uma célula:
Para desmarcar a célula anterior, use um NSIndexPath * lastSelected ivar para rastrear a última célula selecionada:
fonte
Atualize o Swift 4
fonte
com base na exibição de tabela dataArray formada .. da mesma forma, peguei uma matriz vazia e sempre que o usuário toca em uma célula, com base em indexValue de de dataArray, armazenei esse objeto em selectedDataArray
Quanto à pergunta é como ... Uma pergunta tem várias opções (Respostas), mas no final apenas uma ou nenhuma resposta será um resultado
Da mesma forma, apenas uma célula deve mostrar a marca de seleção e as células restantes devem ser desmarcadas ... em alguns casos, você pode desmarcar sua resposta ... Espero que esta seja a melhor resposta para esta pergunta
fonte
Usando Swift 4.2 e swift 5 Código de trabalho da marca de verificação apenas para a linha selecionada em TableView
fonte
Supondo que você esteja em uma classe que herda de
UITableViewController
, isso funciona no Swift 3:fonte
pequeno erro de digitação
deve ler
e também no
onde previamenteSelecionado é seu ivar local, etc. dessa forma, se você recarregar com um índice selecionado, ele também será desmarcado quando você percorrer as seleções possíveis.
fonte
As respostas acima não funcionam se você reutilizou a célula para um grande número de dados. Na rolagem, você pode ver a marca de seleção repetida. Para evitar usar as etapas abaixo:
declarar na variável: var indexNumber: NSInteger = -1
Adicione o código abaixo em cellforRowAtIndexPath:
E em didselectAtIndexpath adicione o código abaixo:
substituir func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
fonte
É melhor enfrentar esse problema de outra direção. Coloque todo o trabalho nos mecanismos UIKit internos e mova a implementação para UITableViewCell:
fonte
Acho que é mais limpo definir o acessório em sua implementação UITableViewCell personalizada. Em swift, usei:
fonte
Apenas chame o
didSelectRowAtIndexPath
método ao selecionar qualquer linha para Mostrar CheckMark e selecione a linha da marca de seleção para ocultar o CheckMark.fonte
swift 4 caso você precise.
fonte
Existem duas maneiras de fazer isso. um é sem várias seleções e outro está com várias seleções.
fonte
O código mencionado acima funciona apenas com a seleção única . Este código a seguir certamente funcionará para seleções múltiplas .
fonte
Quando uma célula selecionada (com a marca de seleção for selecionada novamente), basta remover a seleção.
Bônus:
Use
self.tableView.indexPathForSelectedRow
para detectar indexPath para a célula selecionadafonte