将UIActivityIndi​​catorView添加到UIButton的顶视图

时间:2014-07-17 12:16:07

标签: ios objective-c uibutton uiactivityindicatorview

我有一个UIButton,当用户点击按钮时,我在其中添加了一个UIActivtyIndi​​catorView。用户点击标记为“GO”的UIButton,然后activityIndi​​cator应该进入并覆盖“GO”标题并旋转直到后台停止发生的任何事情。

- (void)going:(UIButton *)button {

NSLog(@"going button pressed");

goingActivity = [[UIActivityIndicatorView alloc]
                 initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
goingActivity.center = button.center;
[button.superview insertSubview:goingActivity aboveSubview:button];
[goingActivity startAnimating];

if ([button.titleLabel.text isEqualToString:@"Go"]) { // Select

    [PFObject saveAllInBackground:save block:^(BOOL success, NSError *error) {

      //Do stuff 

        if (success) {

            [self selectGoingButton:button]; // Toggle Button
            selectedGoingToButton = button; 

            [defaults synchronize];
            [self reloadData]; // Refresh tableview
        }
    }];
}
else { // Deselect



        if (success) {

            //Toggle button
            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];
}

这是处理问题的代码。我删除了代码的内容,但所做的只是更新解析时的用户信息,以及磁盘上的用户信息,因此它不相关。问题仍然是当activityIndi​​cator正在运行时,前进按钮标题不会消失(标题和微调器都可以看到),然后标题切换到“GOING”,然后旋转器停止。

我想要它,以便当用户点击按钮时,activityIndi​​cator启动,掩盖按钮标题,然后当后台活动停止时按钮标题切换为“GOING”。如何让activityIndi​​catorView覆盖标题图层?

编辑:对于澄清,activityIndi​​cator正确定位。它位于按钮的中间,可以在那里看到很好。问题是它没有覆盖标题为“GO”的按钮的顶层。当我添加activityIndi​​cator子视图时,我希望标题消失,但我的当前代码不会发生这种情况。

3 个答案:

答案 0 :(得分:2)

试试这个

UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
CGFloat halfButtonHeight = btnLogin.bounds.size.height / 2;
CGFloat buttonWidth = btnLogin.bounds.size.width;
indicator.center = CGPointMake(buttonWidth - halfButtonHeight , halfButtonHeight);
[btnLogin addSubview:indicator];
[indicator startAnimating];

答案 1 :(得分:0)

不确定这是您在此处执行此操作的最佳方式,但如果您在“selectGoingButton'”上添加测试,则可以使用您拥有的代码。 检查标题是否等于' Go'。如果是,请设置一个空标题 - @" ",如果是@" ",将其设置为@" Going"等等。

答案 2 :(得分:0)

我明白了。实际上我只是过分思考它。

- (void)going:(UIButton *)button {



goingActivity = [[UIActivityIndicatorView alloc]
                 initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
goingActivity.center = button.center;
[button.superview insertSubview:goingActivity aboveSubview:button];


if ([button.titleLabel.text isEqualToString:@"Go"]) { // Select

[button setTitle:@"" forState:UIControlStateNormal];
[goingActivity startAnimating];

    [PFObject saveAllInBackground:save block:^(BOOL success, NSError *error) {

      //Do stuff 

        if (success) {

            [self selectGoingButton:button]; // Toggle Button
            selectedGoingToButton = button; 

            [defaults synchronize];
            [self reloadData]; // Refresh tableview
        }
    }];
}
else { // Deselect

[button setTitle:@"" forState:UIControlStateNormal];
[goingActivity startAnimating];


        if (success) {

            //Toggle button
            selectedGoingToButton = nil;
            [self deselectGoingButton:button];
            [self reloadData];
        }
    }];
}


}

我所做的就是曾经在if-else中,将按钮的标题更改为空。然后从每个案例中启动activityIndi​​cator。