Ei,
Provavelmente é fácil, mas estou quebrando a cabeça aqui e perdi muito tempo sem solução. Eu criei uma linha de botão "SUBMIT" personalizada muito simples com sua própria célula personalizada, a célula tem apenas um botão chamado titleButton, aqui está a configuração da célula:
public override func setup() {
super.setup()
titleButton.setTitle(row.value, forState: .Normal)
titleButton?.addTarget(self, action: #selector(VIBlueButtonCell.onTitleButtonPressed), forControlEvents: .TouchUpInside)
}
Então eu adiciono ao meu formulário assim:
section <<< VIBlueButtonRow() { row in
row.value = "Submit"
}.onCellSelection({ (cell, row) in
print("cell selected?")
})
Eu quero que a célula seja selecionada quando onTitleButtonPressed for chamado; mas até agora não consigo descobrir ... Eu tentei todas as seguintes linhas comentadas, nenhuma parece funcionar:
public func onTitleButtonPressed() {
// super.baseRow.select(true)
// self.baseRow.baseCell.setSelected(true, animated: true)
// self.setSelected(true, animated: true)
// self.formCell()?.setSelected(true, animated: true)
// self.select(nil)
// self.formCell()?.select(nil)
// self.baseRow.baseCell.select(nil)
}
Alguma ideia? Não precisa ser "onCellSelection", qualquer um dos outros métodos de linha servirá. O que eu preciso é uma forma de saber - no nível do formulário - que o botão personalizado foi pressionado, para que eu possa processar os valores do formulário.
OnCellSelection
deve ser chamado automaticamente quando a célula for selecionada. Você pode tentar com cell.didSelect()
mas isso deve acontecer automaticamente, a menos que obviamente a ação do botão seja acionada em vez da seleção da célula.
O que acontece se você remover a linha:
titleButton?.addTarget(self, action: #selector(VIBlueButtonCell.onTitleButtonPressed), forControlEvents: .TouchUpInside)
No entanto, cell.didSelect()
deve funcionar para você
Esta é uma linha personalizada com um UIButton, se eu remover o código "addTarget", nada acontece quando eu pressiono o botão. :(
Eu entendi...
"onTitleButtonPressed" é um método localizado na célula, não na linha, e o que eu queria chamar era o método "onCellSelection" da linha ...
public func onTitleButtonPressed() {
self.baseRow.didSelect()
}
E agora posso interceptar o método "onCellSelection" no nível do formulário.
Obrigado pela ajuda, você pode fechar este problema agora.
Comentários muito úteis
Eu entendi...
"onTitleButtonPressed" é um método localizado na célula, não na linha, e o que eu queria chamar era o método "onCellSelection" da linha ...
E agora posso interceptar o método "onCellSelection" no nível do formulário.
Obrigado pela ajuda, você pode fechar este problema agora.