我使用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");
}
}
答案 0 :(得分:1)
//我认为视图是在commonInit方法的按钮上添加的,所以一旦检查事件就不会触发该按钮
答案 1 :(得分:0)
确保您从故事板连接到swift文件的操作插座,或将以下内容添加到commonInit()
:
func commonInit() {
buttonR.addTarget(self, action: #selector(SampleSubView.buttonClicked(_:)), forControlEvents: .TouchUpInside)
}
答案 2 :(得分:0)
最后我修好了,下面是我做的改变
我更改了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;
}