3

我想在我的应用程序中添加一个加载活动指示器,类似于邮件应用程序中的加载活动指示器,右侧有状态文本。我正在使用 UINavigationController,所以我知道我需要在希望显示它的每个视图上设置 toolbarItems 数组。我可以添加活动指示器,它确实会显示出来,但是当我尝试使用下面的代码添加文本字段时,文本不会显示。有没有办法以编程方式创建一个容器,该容器同时具有状态文本和 UIActivityIndi​​catorView,如果添加到 toolbarItems 数组中,则会显示该容器。

UIBarButtonItem *textFieldItem = [[[UIBarButtonItem alloc] initWithCustomView:textField] autorelease];
self.toolbarItems = [NSArray arrayWithObject:textFieldItem];

更新:我根据 pdriegen 的代码创建了一个从 UIView 派生的类。
我还在控制器中将此代码添加到 viewDidLoad

UIProgressViewWithLabel * pv = [[UIProgressViewWithLabel alloc] init];

UIBarButtonItem * pvItem = [[UIBarButtonItem alloc] initWithCustomView:pv];

[self setToolbarItems:[NSMutableArray arrayWithObject:pvItem]];

目前,工具栏中没有显示任何内容。我错过了什么?

4

1 回答 1

10

不要将活动指示器和标签添加为单独的视图,而是创建一个包含它们的单个复合视图并将该复合视图添加到您的工具栏。

创建一个派生自 UIView 的类,重写 initWithFrame 并添加以下代码:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        [self configureView];
    }
    return self;
}

-(void)configureView{

    self.backgroundColor = [UIColor clearColor];

    UIActivityIndicatorView* activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];        
    activityIndicator.frame = CGRectMake(0, 0, self.frame.size.height, self.frame.size.height );
    activityIndicator.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    activityIndicator.backgroundColor = [UIColor clearColor];

    [self addSubview:activityIndicator];

    CGFloat labelX = activityIndicator.bounds.size.width + 2;

    UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(labelX, 0.0f, self.bounds.size.width - (labelX + 2), self.frame.size.height)];
    label.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    label.font = [UIFont boldSystemFontOfSize:12.0f];
    label.numberOfLines = 1;

    label.backgroundColor = [UIColor clearColor];
    label.textColor = [UIColor whiteColor];
    label.text = @"Loading..";

    [self addSubview:label];
}

您还必须公开用于 startAnimating、stopAnimating 的方法和一个设置标签文本的方法,但希望您明白这一点。

要将其添加到您的工具栏,请使用以下内容进行初始化:

UIProgressViewWithLabel * pv = [[UIProgressViewWithLabel alloc] initWithFrame:CGRectMake(0,0,150,25)];

玩弄宽度以使其适合..

于 2012-05-01T17:16:04.737 回答