在动画期间未调用UIButton的选择器方法

时间:2016-05-04 09:36:44

标签: ios swift uibutton uikit

enter image description here我在动态视图上动态创建了按钮,稍后我将动态视图添加到主视图中 除了没有调用UIButton的选择器方法之外,一切都运行良好。

{{1}}

知道为什么我的选择器方法没有被调用?这是由于动画。我该怎么办呢。

解决方案:在UIAnimationOptions中允许用户交互

4 个答案:

答案 0 :(得分:2)

问题是您正在尝试单击正在设置动画的对象。来自docs

  

在动画期间,暂时禁用用户交互   动画的视图。 (在iOS 5之前,用户交互是   对整个应用程序禁用。)

但不用担心,解决方案非常简单,只需使用选项.AllowUserInteraction调用动画即可。例如(使用您的代码):

UIView.animateWithDuration(1, delay: 0, options: [.Autoreverse,.Repeat,.AllowUserInteraction], animations: {
    users.center.y += 10
}, completion: nil)

答案 1 :(得分:0)

你试过这种方式:

for _ in 0...5{
    // generate new view
    let userBaseView = UIView(frame: CGRectMake(abs(CGFloat(arc4random()) % viewWidth - 90) , abs(CGFloat(arc4random()) % viewHeight - 120), 90, 90))
    userBaseView.backgroundColor = UIColor.redColor()
    // add button to view
    let button = UIButton(frame: userBaseView.bounds)
    button.backgroundColor = UIColor.yellowColor()
    button.showsTouchWhenHighlighted = true
    button.addTarget(self, action: #selector(self.handleTapEventofBtn(_:)), forControlEvents: .TouchUpInside)
    button.setTitle("hello", forState: .Normal)
    userBaseView.addSubview(button)
}
self.view.addSubview(userBaseView)

您只需要在循环之前创建userBaseView,然后在循环中创建按钮并将它们添加到userBaseView,之后只需将userBaseView添加到self.view或您需要添加它的位置。在您的示例中,您将在循环的每次迭代中创建userBaseView。

我认为问题可能在这里:

userBaseView.addSubview(button)
    // add new view containing button to self.view
    self.view.addSubview(userBaseView)
}

userBaseView.addSubview(button)
baseView.addSubview(userBaseView)

首先在循环中将userBaseView添加到self.view:

// add new view containing button to self.view
self.view.addSubview(userBaseView)

然后将其添加到baseView:

baseView.addSubview(userBaseView)

你可以在IB中发布它的样子吗?

答案 2 :(得分:0)

//嗨。你的问题出在选择器行。试试这个:

for _ in 0...5 {
    // generate new view
    let  userBaseView = UIView(frame: CGRectMake(abs(CGFloat(arc4random()) % self.view.frame.size.width - 90) , abs(CGFloat(arc4random()) % self.view.frame.size.height - 120), 90, 90))
    userBaseView.backgroundColor = UIColor.redColor()
    // add button to view
    let button = UIButton(frame: userBaseView.bounds)
    button.backgroundColor = UIColor.yellowColor()
    button.showsTouchWhenHighlighted = true

    button.addTarget(self, action: "buttonAction", forControlEvents: UIControlEvents.TouchUpInside)

    button.setTitle("hello", forState: .Normal)
    userBaseView.addSubview(button)
    self.view.addSubview(userBaseView)
}

//使用xcode 7.2进行测试

func buttonAction() {
    print("working")
}

答案 3 :(得分:0)

动作有一个参数,因此选择器签名实际上是takeActionBtn:
(注意结尾的冒号) 您需要更改它或按钮将尝试调用函数的版本而没有不存在的参数。

button.addTarget(self, action: "button:",forControlEvents: UIControlEvents.TouchUpInside)

func button(sender: UIButton!) {
    // handling code
    print("1")
}