2016-10-06 13 views
0

では動作しません私はUIButtonのサブクラスを作成しました:タッチアップ(@IBAction)はUIButtonのサブクラス

import UIKit 

@IBDesignable 
class CheckboxButton: UIButton { 

@IBInspectable var checkboxBackgroundColor: UIColor = Project.Color.baseGray 
@IBInspectable var textColor: UIColor = Project.Color.mainDarkText 

@IBInspectable var checkboxHighlightedBackgroundColor: UIColor = Project.Color.main 
@IBInspectable var highlightedTextColor: UIColor = Project.Color.mainBrightText 

// MARK: - Properties 
var isChecked: Bool = false { 
    didSet { 
     changeState() 
    } 
} 


// MARK: - Overrides 
override init(frame: CGRect) { 
    super.init(frame: frame) 
    setupView() 
} 

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

override func beginTracking(_ touch: UITouch, with event: UIEvent?) -> Bool { 

    if isChecked { 
     isChecked = false 
    } else { 
     isChecked = true 
    } 

    return false 
} 

override func prepareForInterfaceBuilder() { 
    changeState() 
} 


// MARK: - @IBActions 



// MARK: - Functions 
private func setupView() { 
    isUserInteractionEnabled = true 
    changeState() 
} 

private func changeState() { 
    if isChecked { 
     backgroundColor = checkboxHighlightedBackgroundColor 
     self.setTitleColor(highlightedTextColor, for: .normal) 
    } else { 
     backgroundColor = checkboxBackgroundColor 
     self.setTitleColor(textColor, for: .normal) 
    } 
} 
} 

今私はストーリーボードの内側にボタンを追加し、それをクラスCheckboxButtonを与えました。すべてが機能します。そして、私はこのようなIBActionを追加しました:

@IBAction func pointBtnTapped(_ sender: CheckboxButton) { 
    print("tapped") 
    selectButton(withNumber: sender.tag) 
} 

しかし、これは動作しません(何も出力しません)。通常のボタンで動作しますが、ボタンがサブクラスCheckboxButtonの場合は動作しません。あなたはなにか考えはありますか?

編集:スクリーンショット https://www.dropbox.com/s/ewicc349ag9l6y2/Screenshot%202016-10-06%2023.41.39.png?dl=0

https://www.dropbox.com/s/vxevzscueproivc/Screenshot%202016-10-06%2023.42.33.png?dl=0 (ここではそれらを埋め込むことができなかった理由がわからないようにしてください。)

ありがとうございます!

+0

それは動作しますか? – BaseZen

+1

それがうまくいかないと言うと、クラッシュしたり、警告/エラーを表示したり、黙って失敗したりしますか?また、Storyboardのボタンのタイプや名前を変更した場合は、 'IBAction'接続を再描画して古いものを削除する必要があります。メソッドの隣の小さな円は塗りつぶされているように見えますか? – BaseZen

+0

いいえ、 'AnyObject'は動作しません。つまり、何も起こりません。クラッシュしないで、何も印刷しません。申し訳ありませんが、もし私のテキストが誤解を招いていたら。私はサークルをチェックしたところで塗りつぶされています – Quantm

答えて

1

UIButtonは、beginTracking()をオーバーライドして常にfalseを返しています。このボタンをクリックすると決してクリックされないと考えられます。

あなたの意図は何ですか?いずれにしても、trueを返すとコードで@IBActionが発生します。

編集:非長方形のボタンなどの高度にカスタマイズされた動作のための低レベルの方法を使用して、問題を考えるのは間違いです。あなただけの必要があります:あなたは `AnyObject`にsender``の宣言された型を変更した場合

How to use UIButton as Toggle Button?

+1

回答が受け入れられた後のハウツーSWYMビットを追加 – BaseZen

+0

編集ありがとう!私はこれを再加工します – Quantm

関連する問題