我在此处和其他网站上看到的所有示例都涉及创建 UIActivityIndicatorView 并加载它,例如:
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 - 如何在我的导航栏中创建一个带有 UIActivityIndicator 的按钮,其样式与普通按钮相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/639672/