#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?