Eu estava batendo minha cabeça sobre este, e o google não estava aparecendo nada. Acabei resolvendo e pensei em escrever aqui para o bem da próxima pessoa.
Você tem um UITableView
com várias seções. Cada seção é homogênea, mas a tabela geral é heterogênea. Portanto, convém permitir o reordenamento das linhas em uma seção, mas não nas seções. Talvez você só queira que uma seção seja reordenada (esse foi o meu caso). Se você estiver olhando, como eu estava, no local UITableViewDataSourceDelegate
, não encontrará uma notificação de quando está prestes a permitir que você mova uma linha entre as seções. Você obtém um quando ele começa a mover uma linha (o que é bom) e um quando já está movido e você tem a chance de sincronizar com o material interno. Não ajuda.
Então, como você pode impedir novos pedidos entre as seções?
Vou postar o que fiz como resposta separada, deixando em aberto para outra pessoa postar uma resposta ainda melhor!
fonte
Respostas:
Essa implementação impedirá o reordenamento fora da seção original, como a resposta de Phil, mas também encaixará o registro na primeira ou na última linha da seção, dependendo de onde foi o arrasto, em vez de onde começou.
fonte
UIKit.UITableViewController.CustomizeMoveTarget
, para quem quer saber.Simples o suficiente, realmente.
O UITableViewDelegate possui o método:
Isso é chamado enquanto o usuário está passando o mouse sobre um ponto de queda em potencial. Você tem a chance de dizer: "não! Não largue lá! Largue aqui em vez disso". Você pode retornar um caminho de índice diferente para o caminho proposto.
Tudo o que fiz foi verificar se os índices da seção correspondem. Se eles forem excelentes, retorne o caminho proposto. caso contrário, retorne o caminho de origem. Isso também evita que as linhas de outras seções se afastem enquanto você arrasta - e a linha arrastada volta à sua posição original quando você tenta movê-la para outra seção.
fonte
Versão rápida e rápida da resposta de Jason para pessoas preguiçosas:
Swift 3, 4 e 5
Swift 1 e 2
fonte
Você pode impedir o movimento de linhas entre as seções usando o método abaixo. Apenas não permita nenhum movimento entre as seções. Você pode até controlar o movimento de uma linha específica dentro de uma seção. por exemplo, última linha em uma seção.
Aqui está o exemplo:
fonte
Swift 3:
fonte
Than @Jason Harwig, o código abaixo funciona corretamente.
fonte
Para não mudar de posição entre as seções Swift3
fonte