UIButton взаимодействие не является гладким, когда используется в UICollectionViewCell - PullRequest
0 голосов
/ 11 июня 2019

У меня есть UICollectionViewCell, в который я добавил UIButton. Обычно действие кнопки вызывается, но иногда это не так. Когда ту же кнопку я добавляю в viewcontroller, взаимодействие очень плавное Даже легкое нажатие запускает действие. Ниже код для кнопки:

 func makeTapButton(for superView: UIView) -> UIButton {
      let offSetValue = 15
      let button = UIButton()
      button.backgroundColor = UIColor.yellow
      superView.addSubview(button)
      button.snp.makeConstraints { (make) in
         make.leading.equalToSuperview().offset(-offSetValue)
         make.trailing.equalToSuperview().offset(offSetValue)
         make.top.equalToSuperview().offset(-offSetValue)
         make.bottom.equalToSuperview().offset(offSetValue)
     }
     return button
 }

   func setupCustomView() {
     self.addSubview(containerStackView)
     containerStackView.snp.makeConstraints { (make) -> Void in
        make.top.equalTo(self)
        make.leading.equalTo(self)
        make.trailing.equalTo(self)
        make.bottom.equalTo(self)
    }

    containerStackView.addArrangedSubview(commentStack)
    containerStackView.addArrangedSubview(retweetStack)
    containerStackView.addArrangedSubview(likeStack)
    commentStack.addArrangedSubview(commentImageView)
    commentStack.addArrangedSubview(commentsCountLabel)
    retweetStack.addArrangedSubview(retweetImageView)
    retweetStack.addArrangedSubview(retweetCountLabel)
    likeStack.addArrangedSubview(likeImageView)
    likeStack.addArrangedSubview(likesCountLabel)

    likeButton = makeTapButton(for: likeStack)
    commentButton = makeTapButton(for: commentStack)
    retweetButton = makeTapButton(for: retweetStack)
}

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Определение ваших кнопок в классе UICollectionViewCell и ваших функций в классе UIViewController менее лаги, поскольку они используются повторно;

import UIKit

class YourCell: UITableViewCell {

@IBOutlet weak var yourBtn: UIButton!

var yourButtonAction: (() -> ())?


 @IBAction func buttonPressed(_ sender: UISlider) {

        yourButtonAction()
    }

}

затем в вашем ViewController, где вы вызываете свою ячейку;

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "YourCell", for: indexPath) as! YourCell

cell.yourBtn = {[unowned self] in
      // call your functions here, I hope this will be less laggy 
     print("button pressed")
  }


}
0 голосов
/ 11 июня 2019

попробуйте приведенный ниже код при использовании кнопки UI, помещенной в коллекцию

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell:UICollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath as IndexPath) as! UICollectionViewCell
        cell.btnName.addTarget(self, action: #selector(btnSelClk), for: .touchUpInside)
        cell.binSel.tag = collectionView.tag
        cell.binSel.accessibilityValue = String(indexPath.row)

        return cell
    }

@objc func btnSelClk(sender:UIButton) {
        selectAry[sender.tag] = sender.accessibilityValue!
         // your button action
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...