Как сделать кликабельное табличное представление и метод didSelectRowAt - PullRequest
1 голос
/ 28 апреля 2020

У меня есть раскрывающийся список, который я реализовал с использованием табличного представления:
enter image description here

enter image description here

При выборе другого этажа следует заменить информацию в центре.

У меня есть расширение:

extension DDList: UITableViewDelegate, UITableViewDataSource {

  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return (Manager.shared()?.location.floor.count)!
  }

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
    cell.textLabel?.text = Manager.shared()?.location.floor[indexPath.row].name
    cell.textLabel?.textAlignment = .center
    cell.textLabel?.textColor = .white
    cell.textLabel?.font = font
    cell.backgroundColor = UIColor.black
    return cell
  }

  func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 50
  }

  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let indexPath = Manager.shared()?.location.floor[indexPath.row].name
    let currentCell = tableView.cellForRow(at: indexPath) as UITableViewCell
    let currentItem = currentCell.textLabel!.text
  }

Я не могу сделать функцию выбора элемента из список в методе didSelectRowAt, подскажите, пожалуйста, как это сделать? Таким образом, выбранный этаж сохраняется сверху вниз, где на данный момент (1-й этаж)

1 Ответ

0 голосов
/ 28 апреля 2020

Я бы предпочел сделать это:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let nameOfCurrentItem = Manager.shared()?.location.floor[indexPath.row].name

    //if you use a navigation bar
    self.navigationBar.topItem?.title = nameOfCurrentItem
    //if you use a label
    myLabel.text = nameOfCurrentItem
}

Если вам нужна анимация:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let nameOfCurrentItem = Manager.shared()?.location.floor[indexPath.row].name

    if let currentCell = tableView.cellForRow(at: indexPath){
        UIView.animate(withDuration: 0.3, animations: {

            currentCell.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
            //or any other animation
            //currentCell.alpha = 0.5
        }) { (_) in
            UIView.animate(withDuration: 0.3, animations: {
                currentCell.transform = CGAffineTransform.identity
                //or any other animation
                //currentCell.alpha = 1.0
            }) { (_) in
               //if you use a navigation bar
                self.navigationBar.topItem?.title = nameOfCurrentItem
                //if you use a label
                self.myLabel.text = nameOfCurrentItem
            }
        }
    }
}

Также убедитесь, что ваш tableViewCell и tableView могут быть выбраны в атрибутах инспектор:

Настройки выбора TableView

Настройки выбора TableViewCell

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...