我在动态视图上动态创建了按钮,稍后我将动态视图添加到主视图中 除了没有调用UIButton的选择器方法之外,一切都运行良好。
{{1}}
知道为什么我的选择器方法没有被调用?这是由于动画。我该怎么办呢。
解决方案:在UIAnimationOptions中允许用户交互
答案 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")
}