2009-03-12 36 views
11

Tất cả các ví dụ tôi đã nhìn thấy trên đây và các trang web khác có liên quan tạo ra một UIActivityIndicatorView và tải nó với một cái gì đó như:Làm cách nào để tạo nút có UIActivityIndicator trong thanh điều hướng có cùng kiểu với các nút bình thường?

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

Tuy nhiên, đó chỉ là tạo ra một chỉ số hoạt động đơn giản trong thanh điều hướng. Những gì tôi muốn làm là có một nút trông giống như các nút UIBarButtonSystemItem bình thường nhưng với một chỉ số hoạt động thay vì một trong những hình ảnh mặc định. Tôi đã thử làm initWithImage và initWithTitle với nil hình ảnh hoặc tiêu đề và sau đó thêm chỉ số hoạt động như một subview, nhưng điều đó không hoạt động.

Bất kỳ ý tưởng nào?

Trả lời

1

bạn đã thử tạo UIButton trong thanh nút và sau đó thêm chỉ báo hoạt động làm subView của UIButton?

+0

Tôi đã thử điều đó nhưng tôi dường như không làm cho nó hoạt động. –

1

Tôi làm việc này và rất đơn giản. Chỉ cần đặt chỉ báo hoạt động ở nơi bạn muốn bằng IB, nhưng hãy đảm bảo rằng nó thấp hơn trong danh sách so với thanh bạn muốn và nằm ở "cấp cao nhất" (không phải là một phần phụ của bất kỳ thứ gì khác). Sau đó kiểm soát nó trong mã thông qua một ổ cắm.

1

Dưới đây là một cái gì đó có thể giúp:

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

2 lần [activityIndicator startAnimating]; – user930195

6

Giải pháp của tôi là để tạo ra một lớp con của UIButton:

trong SOActivityButton.h:

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

trong 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 

Sau đó, để sử dụng nó:

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

Bạn sẽ cần phải tìm hoặc tạo một nút-background.png. PSD here phải có.

+0

Hum, UIBarButtonItem không phải là UIButton, do đó, cách tiếp cận "phân lớp" của bạn nên được áp dụng nhiều hơn cho UIBarButtonItem trực tiếp trong trường hợp đó. – yonel

+0

Không thực sự, vì UIBarButtonItem không cung cấp cho bạn quyền truy cập dễ dàng vào hệ thống phân cấp Xem. Bạn vẫn sẽ phải tạo các khung nhìn của riêng bạn để thay thế customView của UIBarButtonItem, không có nhiều điểm con UIBarButtonItem phân lớp để làm điều đó. –

+0

Đá này là một sự xấu hổ nó đã không được chấp nhận như là một câu trả lời. Cảm ơn – Nick

Các vấn đề liên quan