Быстрый обратный вызов кнопки в ячейке просмотра таблицы не работает

#ios #swift #uitableview #closures

#iOS #swift #uitableview #закрытие

Вопрос:

Я хочу иметь UIButton внутри себя TableViewCell , и я попробовал это с помощью a closure , но он ничего не делает:

Cell :

 let favouriteButton: UIButton = {
    let v = UIButton()
    v.setImage(UIImage(systemName: "star"), for: .normal)
    v.setImageTintColor(.darkCustom)
    v.addTarget(self, action: #selector(favouriteButtonTapped), for: .touchUpInside)
    v.imageView?.contentMode = .scaleAspectFit
    v.contentHorizontalAlignment = .fill
    v.contentVerticalAlignment = .fill
    v.translatesAutoresizingMaskIntoConstraints = false
    return v
}()

var favouriteButtonTappedCallback: (() -> ())?

@objc func favouriteButtonTapped() {
    self.favouriteButtonTappedCallback?()
}
  

CellForRowAt:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: SearchBarCell.reuseID) as! SearchBarCell
    
    cell.favouriteButtonTappedCallback = {
        print("tapped")
    }
    return cell
}
  

Чего мне здесь не хватает?

Комментарии:

1. Это должно работать нормально.

2. @Manav вот о чем я думал..

Ответ №1:

Я нашел проблему.. Я позвонил self.addSubView(favouriteButton так contentView , что фактически закрыл кнопку. Просто исправил это, вызвав это:

 contentView.addSubview(favouriteButton)
  

Спасибо за всю помощь!

Комментарии:

1. Это помогло мне! Спасибо!

Ответ №2:

 typealias FavouriteButtonTappedCallback = () -> Void   
var favouriteButtonTappedCallBack = FavouriteButtonTappedCallBack?


 if let tappedClosure = self.favouriteButtonTappedCallback {
            tappedClosure()
        }
  

и

 cell.favouriteButtonTappedCallBack
  

Комментарии:

1. и проверьте настройки вашего делегата, другие выглядят нормально

2. какие делегаты вы имеете в виду? Я установил TableView.delegate и источник данных

3. да, @Chris, насколько я понимаю, ваш VC не является подклассом TableViewVC

4. У меня это так: extension CommunityViewController: UITableViewDelegate, UITableViewDataSource

5. где бы вы ни использовали источник данных и делегат tableview, вы должны ссылаться на свой делегат vc.delegate = self, например

Ответ №3:

Проверьте все иерархии представлений и включите userinteraction для всех, это может быть основным подозрением.

Комментарии:

1. Я могу выбрать строку, поэтому я не думаю, что это проблема :/

2. Вы установили для кнопки «Взаимодействие включено» значение true?