2017-08-27 13 views
0

UICollectionViewCell内の別のカスタムUIViewのサブビューとしてUIButtonを追加しようとしています しかし、私が追加しているこれらの2つのボタンは、UICollectionViewCellでプログラムで追加されたUIButtonが機能しない

ここで私は、ボタンを初期化しています:

let likeButton: UIButton = { 
    let button = UIButton(type: .system) 
    button.anchor(width: 40, height: 40) 
    button.backgroundColor = UIColor(red: 239.0/255.0, green: 83.0/255.0, blue: 80.0/255.0, alpha: 0.8) 
    button.layer.cornerRadius = 20 
    button.layer.masksToBounds = true 
    button.isUserInteractionEnabled = true 
    return button 
}() 

let commentButton: UIButton = { 
    let button = UIButton(type: .system) 
    button.backgroundColor = UIColor(red: 38.0/255.0, green: 37.0/255.0, blue: 37.0/255.0, alpha: 0.8) 
    button.layer.cornerRadius = 20 
    button.layer.masksToBounds = true 
    return button 
}() 

override init(frame: CGRect) { 
    super.init(frame: frame) 
    likeButton.addTarget(self, action: #selector(handleLike), for: .touchUpInside) 
    commentButton.addTarget(self, action: #selector(handleComment), for: .touchUpInside) 
    setupViews() 
} 

func handleLike(_ sender: UIButton) { 
    print("like") 
} 

func handleComment(_ sender: UIButton) { 
    print("comment") 
} 

はサブビューとして追加と制約を設定:

override init(frame: CGRect) { 
    super.init(frame: frame) 

    setupViews() 
} 

func setupViews() { 

    let stackView = UIStackView(arrangedSubviews: [likesLabel, commentsLabel, viewsLabel]) 
    stackView.axis = .horizontal 
    stackView.distribution = .fillProportionally 
    stackView.spacing = 4 

    addSubview(newsImage) 
    newsImage.addSubview(darkView) 
    darkView.addSubview(newsTitleLabel) 
    darkView.addSubview(stackView) 
    darkView.addSubview(timeStampLabel) 
    setButtonsStackView() 

    addConstraintsWithFormaat(format: "H:|[v0]|", views: newsImage) 
    addConstraintsWithFormaat(format: "V:|[v0]|", views: newsImage) 
    newsImage.addConstraintsWithFormaat(format: "H:|[v0]|", views: darkView) 
    newsImage.addConstraintsWithFormaat(format: "V:|[v0]|", views: darkView) 

    stackView.anchor(top: nil, left: leftAnchor, bottom: bottomAnchor, right: nil, paddingTop: 0, paddingLeft: 10, paddingBottom: -10, paddingRight: 0) 
    newsTitleLabel.anchor(top: nil, left: leftAnchor, bottom: stackView.topAnchor, right: nil, paddingTop: 0, paddingLeft: 10, paddingBottom: -5, paddingRight: 0) 
    timeStampLabel.anchor(top: nil, left: nil, bottom: bottomAnchor, right: rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: -10, paddingRight: 10) 
} 

func setButtonsStackView() { 
    let buttonStackView = UIStackView(arrangedSubviews: [likeButton, commentButton]) 
    buttonStackView.axis = .horizontal 
    buttonStackView.distribution = .fillProportionally 
    buttonStackView.spacing = 10 
    darkView.addSubview(buttonStackView) 
    buttonStackView.anchor(top: darkView.topAnchor, left: nil, bottom: nil, right: darkView.rightAnchor, paddingTop: 10, paddingLeft: 10, paddingBottom: 0, paddingRight: 10) 
} 

私はから読んだとしても問題が設定制約となると可能性を考慮していたようあなたがUIImageViewのサブビューとしてボタンを追加しているときに、別のポストはボタンがうまく動作しません。

とにかく私は何か提案を得ることができます!

PS:制約を設定するためのカスタム拡張機能を使用しています。彼らは私のプロジェクトでかなり頻繁に使っています。

ありがとうございました!

答えて

0

私は、セルのcontentViewに関連するbuttonStackViewの制約を設定する必要があることに気付きました。

addSubview(buttonStackView) 
    buttonStackView.anchor(top: topAnchor, left: nil, 
          bottom: nil, right: rightAnchor, 
          paddingTop: 10, paddingLeft: 10, 
          paddingBottom: 0, paddingRight: 10) 

その後、すべてのボタンが正常に動作し、タッチに反応します。

ボタンがUIImageViewのサブビューとして設定されていることが、実際の主な問題でした。

0

あなたはUIImageViewUserInteractionプロパティが falseに設定され、デフォルトで

を試すことができます。これは私たちのほとんどが間違っている場所です。したがって、UIImageViewにコントロールを追加している間にチェックするのは、 isUserInteractionEnabledプロパティをtrueに設定することです。

関連する問題