Ios 在UIButton中添加UIActivityIndicatorView
我在这里读过很多关于在UIButton中添加UIActivityIndicator视图的帖子,但到目前为止没有一篇对我有帮助 我有一个表格视图,每个单元格都有按钮,上面写着“go”。 当用户单击一个按钮时,我希望该按钮显示一个UIActivityIndicator视图,直到所有后台工作完成。这里我使用一些解析方法在后台保存用户信息 我有办法Ios 在UIButton中添加UIActivityIndicatorView,ios,objective-c,uibutton,uiactivityindicatorview,Ios,Objective C,Uibutton,Uiactivityindicatorview,我在这里读过很多关于在UIButton中添加UIActivityIndicator视图的帖子,但到目前为止没有一篇对我有帮助 我有一个表格视图,每个单元格都有按钮,上面写着“go”。 当用户单击一个按钮时,我希望该按钮显示一个UIActivityIndicator视图,直到所有后台工作完成。这里我使用一些解析方法在后台保存用户信息 我有办法 - (void)going:(UIButton *)button { NSLog(@"going button pressed"); /
- (void)going:(UIButton *)button {
NSLog(@"going button pressed");
//Added this code
UIActivityIndicatorView *activity = [[UIActivityIndicatorView alloc]initWithFrame:button.bounds];
[button addSubview:activity];
[activity startAnimating];
if ([button.titleLabel.text isEqualToString:@"Go"]) { // Select
....
// Just code changing user info
[PFObject saveAllInBackground:save block:^(BOOL success, NSError *error) {
if (success) {
//Do more stuff so save user info in background
}
}];
}
else { // Deselect
//More stuff
if (success) {
//Toggle button
[defaults setObject:@"" forKey:@"currentBarID"];
[defaults synchronize];
selectedGoingToButton = nil;
[self deselectGoingButton:button];
[self reloadData];
}
}];
}
}
- (void)selectGoingButton:(UIButton *)button {
NSLog(@"GoingButtonselected");
[button setTitle:@"Going" forState:UIControlStateNormal];
button.layer.borderColor = neonBlue.CGColor;
[button setNeedsDisplay];
}
如您所见,这两种方法是我将按钮从普通颜色切换为高亮显示的颜色,但在按钮高亮显示之前,我希望显示UIActivityIndicatorView
目前它不显示,按钮只是切换颜色而不显示ActivityIndicator
感谢您的帮助。谢谢大家!
编辑:更改UIActivityView初始行,以便我现在传入button.bounds属性
ActivityIndicatorView现在正在显示,但我现在的问题是重新加载循环显示在“GO”按钮标题下,然后在标题更改时停止。我想要这样,当ActivityIndicator显示时,按钮标题就会消失。有什么建议吗?为什么要经历这么多麻烦,尝试将
UIActivityIndicatorView
嵌入另一个Cocoa视图中,作为UIButton
,UIExtView
,或者其他
为什么不把你的UIActivityIndicator视图像这样放在上面呢?这是保证工作
UIActivityIndicatorView * spin = [[UIActivityIndicatorView alloc]
initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spin.center = myButton.center;
[myButton.superview insertSubview:spin aboveSubview:myButton];
[spin startAnimating];
希望这对您有所帮助。活动视图的框架需要与按钮相对。你的按钮真的超过300点宽吗?我明白了,我怎样才能从参数中传递的按钮中获得帧@RMADDYU使用bounds
属性。好的,谢谢。我做了一个编辑。现在我有另一个问题要解决@RMADDY可能重复的I仍然存在此实现的问题,指示器没有覆盖其下方的按钮。按钮上仍然显示“开始”,只是旋转发生。我可以看到机器人“开始”和指示器的旋转,我只想看到旋转器。改变按钮transparency@milesper:考虑到前向兼容性、自动布局约束等,我会将ui按钮
和UIActivityIndicatorView
放在一个公共超级视图中,在此基础上,我将应用布局和alpha。谢谢,但此解决方案仍然不会将activityIndicator置于按钮的停止视图上方。出于某种原因,我仍然可以看到按钮的标题,而指示器只是在按钮上方悬停。指标没有覆盖标题层。我认为你需要把你的指标变大?正确的?我刚刚给了我的尺码(50,50),如果你想要大一点的,就换这个。
- (void)selectGoingButton:(UIButton *)button
{
activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(25, 25, 50, 50)];
activityIndicator.backgroundColor = [UIColor clearColor];
[activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhite];
[activityIndicator startAnimating];
[yourview addSubview:activityIndicator];
NSLog(@"GoingButtonselected");
[button setTitle:@"Going" forState:UIControlStateNormal];
button.layer.borderColor = neonBlue.CGColor;
[button setNeedsDisplay];
}
- (void)going:(UIButton *)button
{
NSLog(@"going button pressed");
//Added this code
//UIActivityIndicatorView *activity = [[UIActivityIndicatorView alloc]initWithFrame:button.bounds];
//[button addSubview:activity];
//[activity startAnimating];
if ([button.titleLabel.text isEqualToString:@"Go"]) { // Select
....
// Just code changing user info
[PFObject saveAllInBackground:save block:^(BOOL success, NSError *error) {
if (success) {
//Do more stuff so save user info in background
}
}];
}
else { // Deselect
//More stuff
if (success) {
//Toggle button
[defaults setObject:@"" forKey:@"currentBarID"];
[defaults synchronize];
selectedGoingToButton = nil;
[self deselectGoingButton:button];
[self reloadData];
}
}];
}
[activityIndicator stopAnimating];
[activityIndicator removeFromSuperview];
activityIndicator = nil;
}