2013-04-17 14 views
10

W mojej aplikacji chcę dodać wskaźnik aktywności na środku paska nawigacyjnego (pozycja tytułu). Gdy odpowiedź serwisowa została zakończona, powinien zostać zastąpiony starym tytułem. Mam 5 pasków nawigacyjnych w moim application.When wyszukiwane w google mam kilka kodów, ale po prostu zmieniają lewy lub prawy przycisk paska. Any help?Wskaźnik aktywności na środku paska nawigacyjnego

Odpowiedz

19

Używasz właściwości titleView elementu nawigacji, aby zastąpić tytuł paska nawigacji. Tak aby dodać wskaźnik aktywności, po prostu to zrobić:

UIActivityIndicatorView *aiView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    aiView.hidesWhenStopped = NO; //I added this just so I could see it 
    self.navigationItem.titleView = aiView; 

Gdy chcesz go usunąć i pokazać tytuł ponownie:

self.navigationItem.titleView = nil; 
+0

Czy istnieje sposób na wyświetlenie wskaźnika aktywności z tekstem typu "łączenie"? – bobsacameno

+0

@ roi.holtzman, myślę, że powinno być możliwe. Będziesz musiał utworzyć UIView jako tytuł nawigacjiItemView i nadać mu dwa subviews; wskaźnik aktywności i etykieta. – rdelmar

2

Ponadto, jeśli chcesz dodać etykietę tekstową obok wskaźnik aktywności (jak zrobione przez Apple w aplikacji ustawień, np Facebook login), można to zrobić:

- (void)showActivityIndicator 
{ 
    UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
    activityIndicatorView.frame = CGRectMake(0, 0, 22, 22); 
    activityIndicatorView.color = [UIColor blackColor]; 
    [activityIndicatorView startAnimating]; 

    UILabel *titleLabel = [UILabel new]; 
    titleLabel.text = @"Creating Account"; 
    titleLabel.font = [UIFont boldFlatFontOfSize:18]; 

    CGSize fittingSize = [titleLabel sizeThatFits:CGSizeMake(200.0f, activityIndicatorView.frame.size.height)]; 
    titleLabel.frame = CGRectMake(activityIndicatorView.frame.origin.x + activityIndicatorView.frame.size.width + 8, 
            activityIndicatorView.frame.origin.y, 
            fittingSize.width, 
            fittingSize.height); 

    UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(-(activityIndicatorView.frame.size.width + 8 + titleLabel.frame.size.width)/2, 
                   -(activityIndicatorView.frame.size.height)/2, 
                   activityIndicatorView.frame.size.width + 8 + titleLabel.frame.size.width, 
                   activityIndicatorView.frame.size.height)]; 
    [titleView addSubview:activityIndicatorView]; 
    [titleView addSubview:titleLabel]; 

    self.navigationItem.titleView = titleView; 
} 

- (void)hideActivityIndicator 
{ 
    self.navigationItem.titleView = nil; 
} 
10

pasqls odpowiedź pracował dobrze dla mnie, pisałem go w szybkim

func showActivityIndicator() { 
     let activityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.White) 
     activityIndicatorView.frame = CGRectMake(0, 0, 14, 14) 
     activityIndicatorView.color = UIColor.blackColor() 
     activityIndicatorView.startAnimating() 

     let titleLabel = UILabel.new() 
     titleLabel.text = "...Connecting" 
     titleLabel.font = UIFont.italicSystemFontOfSize(14) 

     let fittingSize = titleLabel.sizeThatFits(CGSizeMake(200.0, activityIndicatorView.frame.size.height)) 
     titleLabel.frame = CGRectMake(activityIndicatorView.frame.origin.x + activityIndicatorView.frame.size.width + 8, activityIndicatorView.frame.origin.y, fittingSize.width, fittingSize.height) 

     let titleView = UIView(frame: CGRectMake(((activityIndicatorView.frame.size.width + 8 + titleLabel.frame.size.width)/2), ((activityIndicatorView.frame.size.height)/2), (activityIndicatorView.frame.size.width + 8 + titleLabel.frame.size.width), (activityIndicatorView.frame.size.height))) 
     titleView.addSubview(activityIndicatorView) 
     titleView.addSubview(titleLabel) 

     self.navigationItem.titleView = titleView 
    } 

    func hideActivityIndicator() { 
     self.navigationItem.titleView = nil 
    } 
+3

Lepiej napisać podać pewne wyjaśnienie na temat swojej odpowiedzi. – serenesat

+1

Czasami trudno jest znaleźć odpowiedzi w szybkim tempie! dzięki – krummens

Powiązane problemy