在 UIButton 中添加 UIActivityIndicatorView
Posted
技术标签:
【中文标题】在 UIButton 中添加 UIActivityIndicatorView【英文标题】:Adding UIActivityIndicatorView in a UIButton 【发布时间】:2014-07-13 03:30:52 【问题描述】:我在这里阅读了有关在 UIButton 中添加 UIActivtyIndicatorView 的各种帖子,但到目前为止,这些帖子都没有帮助我。
我有一个表格视图,其中每个单元格中都有按钮,上面写着“开始”。 当用户单击一个按钮时,我希望该按钮显示一个 UIActivtyIndicatorView,直到完成所有背景内容。这里我使用一些解析方法在后台保存用户信息。
我有一个方法
- (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。
目前它不显示,并且按钮只是切换颜色而不显示 ActivtyIndicator。
感谢任何帮助。谢谢!
编辑:更改了 UIActivityView 初始化行,以便我现在传入 button.bounds 属性。
ActivtyIndicatorView 现在正在显示,但现在我的问题是重新加载圆圈显示在“GO”按钮标题下,然后在标题更改时停止。我希望它在显示 ActivityIndicator 时按钮标题消失。有什么建议吗?
【问题讨论】:
活动视图的框架需要相对于按钮。你的按钮宽度真的超过 300 点吗? 我明白了,如何从参数中传递的按钮中获取框架? @rmaddy 使用bounds
属性。
好的,谢谢。我进行了编辑。现在我有另一个我正在努力解决的问题。 @rmaddy
UIActivityIndicatorView inside UIButton的可能重复
【参考方案1】:
- (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;
希望对你有所帮助。
【讨论】:
谢谢,但是这个解决方案仍然没有将activityIndicator放在按钮的停止视图上方。出于某种原因,我仍然看到按钮的标题,并且指示器只是悬停在它上面。指示器不覆盖标题层。 我认为你需要让你的指标更大?对?我刚刚给了我的尺码(50,50),如果你想要更大的,可以改一下。【参考方案2】:为什么要经历这么多麻烦并尝试将UIActivityIndicatorView
嵌入到另一个 Cocoa 视图中,例如 UIButton
、UITextView
或其他。
为什么不把你的UIActivityIndicatorView
像这样放在上面呢?这保证有效。
UIActivityIndicatorView * spin = [[UIActivityIndicatorView alloc]
initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spin.center = myButton.center;
[myButton.superview insertSubview:spin aboveSubview:myButton];
[spin startAnimating];
【讨论】:
我仍然有这个实现的问题,指标没有覆盖它下面的按钮。按钮上仍然显示“GO”,只是发生了旋转。我可以看到机器人的“GO”和指示器的旋转,我只想能够看到微调器。 更改按钮透明度 @milesper:考虑到前向兼容性、自动布局约束等,我会将UIButton
和UIActivityIndicatorView
放在一个共同的超级视图中,我将在上面应用布局和alpha。
以上是关于在 UIButton 中添加 UIActivityIndicatorView的主要内容,如果未能解决你的问题,请参考以下文章