2012-07-08 41 views
4

我有一个通用的圆角矩形按钮可以延伸到另一个视图。当用户按下圆角矩形时,它开始提取。我希望在处理提取时使用旋转轮代替圆角矩形按钮内的文本(“下一个”)。如何用旋转器替换圆形矩形按钮中的文本?

我创建了微调:

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
[spinner startAnimating]; 

但我不知道如何使它替换圆角的矩形按钮上的文本。

有什么建议吗?谢谢。

+1

一个字:叠加。 – 2012-07-08 02:29:07

+0

有关如何在这里使用叠加的任何建议?谢谢 – blrsk 2012-07-08 02:33:29

+0

您可以随时随地使用它的相同方式 - 清除文本,然后使覆盖(以前不可见)可见。 – 2012-07-08 03:47:44

回答

7

像往常一样创建(或获取对按钮的引用),然后在处理按钮单击时创建微调器并将其设置为按钮的子视图。也许值得禁用按钮来停止多次点击。

东西沿着以下行应该做的伎俩:

... 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    button.frame = CGRectMake(10, 10, 70, 40); 
    [button setTitle:@"Next" forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:button]; 
    ... 

- (void)click:(UIButton *)button { 
    [button setTitle:@"" forState:UIControlStateNormal]; 
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    [spinner startAnimating]; 
    spinner.frame = button.bounds; 
    [button addSubview:spinner]; 
    button.enabled = NO; 

    // do your actual work... 
} 
+0

它有帮助。谢谢。 – blrsk 2012-07-08 17:17:59

1

我写了利用关联对象

类别

的UIButton + ActivityIndi​​cator.h

// Created by reynaldo on 1/16/14. 

#import <Foundation/Foundation.h> 

@interface UIButton (ActivityIndicator) 
- (void)startActivityIndicator; 
- (void)stopActivityIndicator; 
@end 

的UIButton + ActivityIndi​​cator.m

// Created by reynaldo on 1/16/14. 

#import <objc/runtime.h> 
#import "UIButton+ActivityIndicator.h" 

static char TITLE_KEY; 
static char ACTIVITY_INDICATOR_KEY; 

@implementation UIButton (ActivityIndicator) 

- (void)startActivityIndicator { 
    objc_setAssociatedObject(self, &TITLE_KEY, self.currentTitle, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 

    [self setTitle:@"" forState:UIControlStateNormal]; 
    UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
    [self addSubview:activityIndicatorView]; 
    activityIndicatorView.frame = CGRectMake(self.frame.size.width/2, self.frame.size.height/2. - 2, 7, 7); 
    [activityIndicatorView startAnimating]; 

    objc_setAssociatedObject(self, &ACTIVITY_INDICATOR_KEY, activityIndicatorView, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 

} 

- (void)stopActivityIndicator { 
    NSString *title = objc_getAssociatedObject(self, &TITLE_KEY); 
    UIActivityIndicatorView *activityIndicatorView = objc_getAssociatedObject(self, &ACTIVITY_INDICATOR_KEY); 

    if(activityIndicatorView) { 
     [activityIndicatorView removeFromSuperview]; 
    } 

    if(title.length) { 
     [self setTitle:title forState:UIControlStateNormal]; 
    } 
} 

@end