[英]How can I create a button with a UIActivityIndicator in my navigation bar with the same style as normal buttons?
我在这里和其他网站上看到的所有示例都涉及创建UIActivityIndicatorView并使用以下内容加载它:
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]
initWithCustomView:myActivityIndicatorView
target:nil
action:nil]
autorelease];
但是,这只是在导航栏中创建一个普通活动指示器。 我想要做的是有一个看起来像普通的UIBarButtonSystemItem按钮,但有一个活动指示器,而不是一个默认图像。 我尝试使用nil图像或标题执行initWithImage和initWithTitle,然后将活动指示符添加为子视图,但这不起作用。
有任何想法吗?
我的解决方案是创建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应该有一个。
这可以帮到我们:
activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
[activityIndicator startAnimating];
UIBarButtonItem *activityItem = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
[activityIndicator release];
self.navigationItem.rightBarButtonItem = activityItem;
[activityItem release];
[activityIndicator startAnimating];
您是否尝试在按钮栏中创建UIButton,然后添加活动指示器作为UIButton的子视图?
我有这个工作,它很简单。 只需将活动指示器放在IB所需的位置,但要确保它在列表中低于您想要的栏,并且处于“顶级”(不是其他任何子视图)。 然后通过插座在代码中控制它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.