以编程方式使用按钮目标创建自定义视图

时间:2014-12-06 22:52:28

标签: ios objective-c cocoa-touch swift uiview

我有一个自定义 UIView 子类,其中附加了一些 UIButtons 。对于每个按钮,在 UIViewController 上定义了一个目标动作,其中包括自定义 UIView

不知何故, TouchUpInside 事件永远不会被包含在ViewController之类的自定义视图中捕获。由于UIViews是 UIResponderChain 的一部分,我想知道为什么事件没有被解雇?委派目标行动是否有意义,还是应该采取另一种方式?

自定义UIView子类:CustomView

let button = UIButton(frame: CGRectMake(10.0, 10.0, 100.0, 100.0))
button.addTarget(self.delegate, action: "buttonTapped:", forControlEvents: .TouchUpInside) 

的ViewController

// Include the custom view
let customView = CustomView()
customView.delegate = self
self.view.addSubview(customView)
...

func buttonTapped(sender: AnyObject!) {
    // Doesn't get called
}

3 个答案:

答案 0 :(得分:1)

您是否在自定义视图中将userInteractionEnabled设置为YES?默认情况下,它是NO来自UIResponder(主要是按钮)的视图。

如果视图为userInteractionEnabled = NO,则会忽略触摸事件。

答案 1 :(得分:0)

我假设你添加目标时self.delegate是nil ... 几点解决方案:

  • 使用委托初始化自定义视图(创建自定义函数initWithFrame:delegate)
  • 覆盖自定义视图的setDelegate函数,并将目标添加到按钮;
  • 将按钮变量公开,并在外部类中手动添加目标

答案 2 :(得分:0)

不幸的是我错过了为按钮声明框架矩形 - 所以按钮正在显示,但它们确实无法点击。