2016-04-01 15 views
1

xibとswiftを使用してUIViewのサブクラスを作成しました。このビューには、xibファイルのサブビューとしてUIButtonがあり、Swift Fileにactionlistenerがあります。このビューは他のクラスによって割り当てられ、さらにサブビューとして使用されます。ビューはUIに正しくロードされますが、ボタンのアクションアクションリスナーは呼び出されておらず、一部のボタンでもクリックできません。UIViewサブクラスとそのサブビューのIBAction

import UIKit 


class SampleSubView: UIView { 

    @IBOutlet weak var buttonR: UIButton! 
    @IBOutlet var view: UIView! 


    required init?(coder aDecoder: NSCoder) { 

     super.init(coder: aDecoder); 
     self.commonInit(); 

    } 

    override init(frame: CGRect) { 

     super.init(frame: frame); 
     self.commonInit(); 

    } 
    func commonInit() { 

     let view = NSBundle.mainBundle().loadNibNamed("SampleSubView", owner: self, options: nil).first as! UIView; 
     self.addSubview(view); 

    } 

    func setOptionText(textStr:String){ 

     self.buttonRef.setTitle(textStr, forState: UIControlState.Normal); 


    } 

    @IBAction func buttonClicked(sender: AnyObject) { 
     print("hi"); 
    } 


} 
+0

をチェックうまくいきます。 – Amulya

答えて

0

あなたの迅速なファイルにストーリーボードから接続されているアクションのコンセントを持っていることを確認し、またはcommonInit()に次の行を追加します。最終的に私は、それは以下の、固定しまった

func commonInit() { 
    buttonR.addTarget(self, action: #selector(SampleSubView.buttonClicked(_:)), forControlEvents: .TouchUpInside) 
} 
+0

ビューを静的にロードすると同じものが正常に動作しています – Amulya

0

は私が

を行った変更されています
  • 私は代わりにIがFUNCのcommonInitを変更
  • "のUIView" の "Uicontrolの" サブクラスとしてそれを作りました()

    func commonInit(){ 
            view = loadViewFromNib(); 
            view.frame = bounds; 
            view.autoresizingMask = [.FlexibleWidth,.FlexibleHeight]; 
            addSubview(view); 
    } 
    

    FUNCのloadViewFromNib()は、以下のように - >のUIView {

     let bundle = NSBundle(forClass: self.dynamicType); 
         let nib = UINib(nibName: nibName, bundle: bundle); 
         let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIControl; 
         return view; 
    
        } 
    
1

//私は、イベントがそのボタンに火をdidntのように、ビューは、commonInit法からボタンの上に追加されると思います呼ばれている:(NSCoderコーダaDecoder)私はSampleSubViewとしてストーリーボード内の任意のビューのクラスを与える場合は、initは、?:かつて私は、ビューが初期化(CGRectフレーム)に割り当てられている場合、この問題が発生していると思います

関連する問題