码迷,mamicode.com
首页 > 其他好文 > 详细

UIActivityIndicatorView添加到UIButton上并响应事件

时间:2015-01-08 16:53:50      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];

[spinner startAnimating];

[spinner setUserInteractionEnabled:NO]; // setting UserInteractionEnable to NO, any touch events are forwarded to the superview (the button)

spinner.center = CGPointMake(20, 18);

[self addSubview:spinner];

 

 

 

原文:地址:https://coderwall.com/p/4fydiq/uiactivityindicatorview-over-an-uibutton

Did you know that putting an UIActivityIndicatorView over a UIButton, all touch events are blocked by the spinner?

If you do the same with a UILabel or UIImageView, all events are forwarded to the button (its superview), like I (and you) expect. But with UIActivityIndicatorView this is not the behaviour you get. All these classes are extensions of UIView, so why they work differently?

The key difference is that the UIActivityIndicatorView is animated. When you have an animated view, iOS changes its userInteractionEnabled property to YES to prevent interactions (and interruptions) from the user with that view, during the animation phase.

How to fix that? Just set userInteractionEnabled to NO on the spinner, so all the touch events are forwarded again to the spinner superview (the button in my case) and everything works like I expect.

Here is the example code

spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
[spinner startAnimating];
[spinner setUserInteractionEnabled:NO]; // setting UserInteractionEnable to NO, any touch events are forwarded to the superview (the button)
spinner.center = CGPointMake(20, 18);
[self addSubview:spinner];

UIActivityIndicatorView添加到UIButton上并响应事件

标签:

原文地址:http://www.cnblogs.com/programmer-blog/p/4210916.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!