iphone - 如何在我的导航栏中创建一个带有 UIActivityIndi​​cator 的按钮,其样式与普通按钮相同?

标签 iphone objective-c cocoa-touch

我在此处和其他网站上看到的所有示例都涉及创建 UIActivityIndi​​catorView 并加载它,例如:

self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] 
                   initWithCustomView:myActivityIndicatorView 
                   target:nil 
                   action:nil] 
                  autorelease];

但是,这只是在导航栏中创建了一个普通的事件指示器。我想要做的是有一个按钮,看起来就像普通的 UIBarButtonSystemItem 按钮,但带有事件指示器而不是默认图像之一。我试过使用 nil 图像或标题执行 initWithImage 和 initWithTitle,然后将事件指示器添加为 subview ,但这不起作用。

有什么想法吗?

最佳答案

我的解决方案是创建一个 UIButton 的子类:

SOActivityButton.h 中:

@interface SOActivityButton : UIButton 
{
UIActivityIndicatorView* activityIndicator;
}
@end

SOActivityButton.m 中:

@implementation SOActivityButton

- (id)initWithFrame:(CGRect)frame 
{
    if (self = [super initWithFrame:frame]) 
    {
        CGRect innerFrame = CGRectInset(frame, 8.0f, 8.0f);
        activityIndicator = [[UIActivityIndicatorView alloc]
                                    initWithFrame:innerFrame];
        activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
        [self addSubview:activityIndicator];
    }
    return self;
}

- (void)dealloc 
{
    [activityIndicator release], activityIndicator = nil;
    [super dealloc];
}

- (void) startAnimating
{   
    [activityIndicator startAnimating];
}

- (void) stopAnimating
{   
    [activityIndicator stopAnimating];
}
@end

然后使用它:

SOActivityButton* activityButton = [[SOActivityButton alloc] 
                    initWithFrame:CGRectMake(0.0f, 0.0f, 32.0f, 32.0f)];
[activityButton setImage:[UIImage imageNamed:@"button-background.png"]
                    forState:UIControlStateNormal];
[activityButton addTarget:self action:@selector(myAction:) 
                    forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *activityBarButtonItem = [[UIBarButtonItem alloc] 
                    initWithCustomView:activityButton];
[activityButton release];
self.navigationItem.rightBarButtonItem = activityBarButtonItem;
[activityBarButtonItem release];

您需要找到或创建一个 button-background.png。 PSD here应该有一个。

关于iphone - 如何在我的导航栏中创建一个带有 UIActivityIndi​​cator 的按钮,其样式与普通按钮相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/639672/

相关文章:

ios - Objective-C 调用 Swift 函数

iphone - 为 iOS 创建本地化文件

cocoa-touch - UIActivityViewController : Activity-Items configuration

ios - 如何在 UILabel 中制作带下划线的文本?

iphone - 当 View Controller 加载时强制我的 View Controller 横向显示

android - Titanium 是否会将 iPhone 应用程序转换为 Android?

Iphone屏幕视频捕捉

iphone - UITextField 中的自动完成电子邮件功能

ios - 如何在 ios 中正确设置推送通知

ios - UIScrollView - 滚动或滑动?