UIView SubClass及其子视图的IBAction

时间:2016-04-01 06:19:38

标签: ios swift uiview actionlistener

我使用xib和swift创建了一个UIView子类,这个视图有一个UIButton作为xib文件中的子视图和一个Swift File中的actionlistener。此视图由其他类分配,并进一步用作子视图。视图是在UI上正确加载的,但是没有调用按钮的动作actionlistener,甚至一些按钮甚至都不可点击。

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");
    }


}

3 个答案:

答案 0 :(得分:1)

//我认为视图是在commonInit方法的按钮上添加的,所以一旦检查事件就不会触发该按钮

答案 1 :(得分:0)

确保您从故事板连接到swift文件的操作插座,或将以下内容添加到commonInit()

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

答案 2 :(得分:0)

最后我修好了,下面是我做的改变

  • 我把它作为子类" UIControl"而不是" UIView"
  • 我更改了func commonInit(),如下所示

    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;
    
        }