Задать вопрос
@fakin_kiska
Telegram Bots and iOS

Почему не отображается tableView при нажатии на кнопку?

Я делаю выпадающий список с несколькими значениями в нем, он должен выпадать при нажатии на кнопку. Нажатие происходит, но выпадает невидимый список, без отображения значений

Вот часть кода, которая задействована для этой функции:

class AddNewOperationViewController: UIViewController {

   let categories = ["Taxi", "Restaurants", "Gloceries"]
   let categoryButton: UIButton = {
   let button = UIButton()
    button.backgroundColor = .black
    button.setTitle("Category", for: .normal)
    button.addTarget(self,
                     action: #selector(onClickDropButton),
                     for: .touchUpInside)
    return button
}()
   var tableView = UITableView()

override func viewDidLoad() {
    super.viewDidLoad()        
    tableView.isHidden = true
    setupUI()
}

func animate(toogle: Bool, type: UIButton) {
    if toogle {
        UIView.animate(withDuration: 0.3) { [self] in
            self.tableView.isHidden = false
        }
    } else {
        UIView.animate(withDuration: 0.3) {
            self.tableView.isHidden = true
        }
    }
}

func setButtonLabelTableViewStack(_ stack: UIStackView, button: UIButton, label: UILabel, tableView: UITableView) {
    stack.backgroundColor = .white.withAlphaComponent(0.9)
    stack.addArrangedSubview(label)
    stack.addArrangedSubview(button)
    stack.addArrangedSubview(tableView)
    stack.axis = .vertical
    stack.alignment = .center
    stack.spacing = 50
}

@objc func onClickDropButton(_ sender: Any) {
      if tableView.isHidden {
          print("123")
          animate(toogle: true, type: categoryButton)
      } else {
          animate(toogle: false, type: categoryButton)
      }
}

private func setupUI() {
    let descriptionStack = UIStackView()
    setLabel(self.categoryTitle, text: self.titles[1])
    setButtonLabelTableViewStack(categoryStack, button: self.categoryButton, label: self.categoryTitle, tableView: self.tableView)
}

extension AddNewOperationViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return categories.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = categories[indexPath.row]
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        categoryButton.setTitle("\(categories[indexPath.row])", for: .normal)
        animate(toogle: false, type: categoryButton)
    }
}
  • Вопрос задан
  • 56 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
gagarin67
@gagarin67
iOS-разработчик
Ну, во-первых, stackView не добавлен на view (view.addSubview(stackView)), во-вторых, нужно установить для stackView констрейнты или хотя бы фрейм, чтобы у нее были размеры, отличные от .zero, в-третьих, находящаяся в stackView tableView с большой долей вероятности будет иметь нулевую высоту, я бы не рекомендовал так делать, а добавил бы ее просто ниже stackView
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Araya
Ваш VC не является делегатом таблицы.
Аля:
tableView.delegate = self
tableView.dataSource = self
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы