Изменение действия кнопки во время выполнения, странное нажатие на контроллер представления - PullRequest
0 голосов
/ 19 июня 2020

Мой код настолько сложен, что я собираюсь немного его минимизировать.

У меня есть tableviewController с двумя ячейками и кнопкой (кнопка не в ячейке). Я меняю действие кнопки в соответствии с выбранной ячейкой:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  if indexPath.row == 0{
    self.botButton.addTarget(self, action: #selector(self.showA), for: .touchUpInside)
  else{
    self.botButton.addTarget(self, action: #selector(self.showB), for: .touchUpInside)

  } 

botButton - это выход моей кнопки

Это мои кнопки действий:

 @objc func showA(){
       let showParcelsViewController = self.storyboard?.instantiateViewController(withIdentifier: "showA") as! showAVC
       self.navigationController?.pushViewController(showParcelsViewController, animated: true)
   }



@objc func showB(){
    let decribeland = self.storyboard?.instantiateViewController(withIdentifier: "showB") as! showBVC
              self.navigationController?.pushViewController(decribeland, animated: true)
}

При загрузке страницы, если я выбираю строку и затем нажимаю кнопку, она работает безупречно. Но, например, если я выбираю 1.row, затем меняю выбранную строку на 2.row и нажмите кнопку, View нажимает Контроллер просмотра первой строки ( showAV C), а затем быстро нажимает контроллер просмотра второй строки (showBV C).

Как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Вот еще один способ.

Установите для кнопки tag значение indexPath. Введите didSelectRowAt

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
{
   self.botButton.tag = indexPath.row
} 

Затем используйте кнопку tag, чтобы узнать, какой контроллер представить.

@IBAction func showBtnPressed(sender : UIButton) { // 
    let index = sender.tag
    if index == 0 {
        let showParcelsViewController = self.storyboard?.instantiateViewController(withIdentifier: "showA") as! showAVC
        self.navigationController?.pushViewController(showParcelsViewController, animated: true)
    } else {
        let decribeland = self.storyboard?.instantiateViewController(withIdentifier: "showB") as! showBVC
        self.navigationController?.pushViewController(decribeland, animated: true)
    }
}
1 голос
/ 19 июня 2020

Цель продолжает складываться, пока вы продолжаете выбирать строки, которые вам нужно удалить предыдущую цель, когда вы добавляете новую:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if indexPath.row == 0 {
        botButton.removeTarget(self, action: #selector(self.showB), for: .touchUpInside)
        botButton.addTarget(self, action: #selector(self.showA), for: .touchUpInside)
    } else {
        botButton.removeTarget(self, action: #selector(self.showA), for: .touchUpInside)
        botButton.addTarget(self, action: #selector(self.showB), for: .touchUpInside)
    }
}
...