web-dev-qa-db-ja.com

Swift3:コード付きのボタンを追加

りんごを読んでいるSwift(iOS)ドキュメントですが、Swift 2のために書かれており、私はSwift 3。プログラムでボタンを追加しますが、変更があるようで、修正する方法が見つかりません。

Swift 2の例のコードは次のとおりです。

import UIKit

class RatingControl: UIView {

// MARK: Initialization

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

    // Buttons
    let button = UIButton(frame: CGRect(x: 0, y: 0, width: 44, height: 44))
    button.backgroundColor = UIColor.red()
    button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(_:)), forControlEvents: .TouchDown)
    addSubview(button)
}

override func intrinsicContentSize() -> CGSize {
    return CGSize(width: 240, height: 44)
}

// MARK: Button Action

func ratingButtonTapped(button: UIButton){
    print("Button pressed")
}
}

「fix-it」がエラーを示した後に行った唯一の変更は、セレクタ内のこれです:

button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(button:)), for: .touchDown)

これは「押されたボタン」を印刷するはずでしたが、そうではありません。何か助け?

9
pRivaT3 BuG

私のコード:

button.backgroundColor = UIColor.red

button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(_:)), for: .touchDown)

override var intrinsicContentSize : CGSize {
//override func intrinsicContentSize() -> CGSize {
    //...
    return CGSize(width: 240, height: 44)
}

// MARK: Button Action
func ratingButtonTapped(_ button: UIButton) {
    print("Button pressed ????")
}
20

このようなものを試してください。私はテストしていませんが、動作するはずです:

let button = UIButton(frame: CGRect(x: 0, y: 0, width: 44, height: 44))
button.backgroundColor = UIColor.red
button.addTarget(self, action: #selector(ratingButtonTapped), for: .touchUpInside)
addSubview(button)

func ratingButtonTapped() {
    print("Button pressed")
}
13
axel

ソリューションを見つけました。何らかの理由で:

func ratingButtonTapped(button: UIButton)

ボタンの前に「_」が必要です。したがって、次のようになります。

func ratingButtonTapped(_ button: UIButton)

そして、コードの他の部分は次のとおりでなければなりません。

button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(_:)), for: .touchDown)

助けてくれてありがとう:)あなたの方法も正しいかもしれませんが、それはAppleが望んでいます。

2
pRivaT3 BuG