2016-07-16 10 views
8

読み込み中Apples swift(iOS)のドキュメントですが、Swift 2用に書かれています。私はSwift 3を使用します。プログラムでボタンを追加したいのですが、変更があり、それを修正する。ここSwift3:コード付きのボタンを追加する

コードありスイフト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-それはエラーがセレクタにこのされ示された後、私が作った唯一の変更:

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

この"ボタンが押された"と印刷されるはずですが、そうではありません。どんな助け?

+0

何あなたRatingControl.ratingButtonTapped(ボタン:)方法について?それはその実装に依存します。 –

+0

私が書いたすべてがAppleの例であるため、問題があるかどうかは分かりません...リンクは次のとおりです:tinyurl.com/q5oouqz –

+0

@OnurTunaセレクタはそれを参照するだけです。実装に依存しないでください。 – Gerald

答えて

12

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

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") 
} 
+0

ありがとうございました。 –

2

解決策が見つかりました。何らかの理由で:

func ratingButtonTapped(button: UIButton) 

には「_」ボタンが必要です。だから、次のようになります。

func ratingButtonTapped(_ button: UIButton) 

とコードの他の部分でなければなりません:助けるため

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

感謝:)あなたの方法は、正しいかもしれないが、1 Appleがそれを望んでいるのthats。

+1

swift 3では、swift 2とは異なり、すべてのパラメータに名前が付けられます(最初のパラメータの場合もあります)。より良い解決策は '#selector(RatingControl.ratingButtonTapped(button :))'です。この方法では、セレクタで使用するだけで機能を変更する必要はありません – Gerald

17

マイコード:

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 ") 
} 
+0

ありがとう、これは2の代わりにSwift 3を使用した場合のドキュメントの問題点の正解です。 – meburbo

関連する問題