如何在导航栏中创建一个带有UIActivityIndi​​cator的按钮,其样式与普通按钮相同? [英] How can I create a button with a UIActivityIndicator in my navigation bar with the same style as normal buttons?

查看:127
本文介绍了如何在导航栏中创建一个带有UIActivityIndi​​cator的按钮,其样式与普通按钮相同?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在这里和其他网站上看到的所有示例都涉及创建一个UIActivityIndi​​catorView并加载它:

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

但是,这只是在导航栏中创建一个简单的活动指示器。我想做的是有一个按钮,看起来像正常的UIBarButtonSystemItem按钮,但具有活动指示器,而不是默认图像之一。我试过做initWithImage和initWithTitle与nil图像或标题,然后添加活动指示器作为一个子视图,但不起作用。



任何想法? p>

解决方案

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



SOActivityButton.h ::

  @interface SOActivityButton:UIButton 
{
UIActivityIndi​​catorView * activityIndi​​cator;
}
@end

SOActivityButton.m

  @implementation SOActivityButton 

- (id)initWithFrame:(CGRect)frame
{
if(self = [super initWithFrame:frame])
{
CGRect innerFrame = CGRectInset(frame,8.0f,8.0f);
activityIndi​​cator = [[UIActivityIndi​​catorView alloc]
initWithFrame:innerFrame];
activityIndi​​cator.activityIndi​​catorViewStyle = UIActivityIndi​​catorViewStyleWhite;
[self addSubview:activityIndi​​cator];
}
return self;
}

- (void)dealloc
{
[activityIndi​​cator release],activityIndi​​cator = nil;
[super dealloc]
}

- (void)startAnimating
{
[activityIndi​​cator startAnimating];
}

- (void)stopAnimating
{
[activityIndi​​cator 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 此处应该有一个。


All of the examples I've seen on here and other sites involved creating a UIActivityIndicatorView and loading it with something like:

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

However, that just creates a plain activity indicator in the navigation bar. What I want to do is have a button that looks just like the normal UIBarButtonSystemItem buttons but with an activity indicator instead of one of the default images. I've tried doing initWithImage and initWithTitle with nil images or titles and then adding the activity indicator as a subview, but that doesn't work.

Any ideas?

解决方案

My Solution is to create a subclass of UIButton:

in SOActivityButton.h:

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

in 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

Then to use it:

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];

You will need to find or create a button-background.png. The PSD here should have one.

这篇关于如何在导航栏中创建一个带有UIActivityIndi​​cator的按钮,其样式与普通按钮相同?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆