2016-04-01 21 views
1

UIView'in bir alt sınıfını xib ve swift kullanarak oluşturdum. Bu görünümde bir UIButton, xib dosyasında alt dosya olarak ve Swift File'da bir actionlistener olarak bulunuyor. Bu Görünüm, başka bir sınıf tarafından tahsis edilmekte ve alt rapor olarak kullanılmaktadır. Görünüm UI'ye doğru şekilde yüklenir, ancak düğmenin eylem eylemcisi çağrılmıyor ve bazı düğmeler bile tıklanabilir bile değil.UIView Alt Sınıfı ve Alt Görünümlerinin 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

denetleyin Bu sorun, init (frame: CGRect) ile görünüm ayrılırken oluşuyor, SampleSubView olarak story board'da herhangi bir görünüm sınıfı verirseniz o zaman init? (kodlayıcı aDecoder: NSCoder) çağrılır ve iyi çalışıyor. – Amulya

cevap

0

Eğer hızlı dosyaya Storyboard'dan bağlı bir eylem çıkış varsa veya eklemek emin olun şu commonInit() için: i sabit var Nihayet

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

Görünümü statik olarak yüklediğimde aynı iyi çalışıyor – Amulya

0

aşağıdaki değişiklikler i

yapılır
  • yerine ben fonk commonInit değişti
  • "UIView" nin "UIControl" alt sınıf olarak yaptım() o düğmeyi> 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

// i görünümü commonInit yönteminden düğmesinin üzerine ilave edilse düşünüyorum olaylar çok daha hiç yangın -

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

altına fonk loadViewFromNib() olarak Bir kez

İlgili konular