Ios 在UIButton中添加UIActivityIndicatorView

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"); /

我在这里读过很多关于在UIButton中添加UIActivityIndicator视图的帖子,但到目前为止没有一篇对我有帮助

我有一个表格视图,每个单元格都有按钮,上面写着“go”。 当用户单击一个按钮时,我希望该按钮显示一个UIActivityIndicator视图,直到所有后台工作完成。这里我使用一些解析方法在后台保存用户信息

我有办法

- (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;
}