2011-12-23 3 views
1

일부 계산을 수행하는 뷰가 있으며이 시간 동안 backButton을 숨기려고합니다. UINavigationBar에서 backButton의 가시성을 동적으로 변경하십시오.

나는 백 버튼이 새로운 컨트롤러를 열려면이를 사용하고 취소 버튼 :

[self.navigationController pushViewController:calcController animated:YES]; 

이다 나는 계산, 메인 스레드의 모든 시작하는 방법 :

- (void)startSth { 
    self.viewMode = modeRunning; 
    [self updateButtons]; 
    [self performSelector:@selector(doSth) withObject:nil afterDelay:0.1]; 
} 

- (void)doSth { 
    ... 
    self.viewMode = modeFinished; 
    [self updateButtons]; 
} 

을 그리고이 방법은 버튼의 가시성을 전환해야합니다.

- (void)updateButtons { 
    BOOL busy = (self.viewMode==modeRunning); 
    self.navigationItem.hidesBackButton = busy; //back button 
    self.navigationItem.rightBarButtonItem.enabled = !busy; //cancel button 
} 

문제 : fi에서 처음에는 예상대로 작동하고 버튼은 숨겨진 다음 다시 표시됩니다. 뒤로 버튼을 클릭하면보기가 팝업됩니다. 두 번째 실행에서는 버튼이 처음부터 누락되었습니다. updateButtons 메서드는 두 번 호출되어 self.viewMode 변수를 로깅하고 busy는 올바른 동작 (처음 1시에 0)을 표시하므로 분명히 hidesBackButton 호출이 작동하지 않습니다.

네비게이션 항목 navigationButton을 nil로 설정하고, 사용자 정의 빈 버튼을 사용하여 setNeedsDisplay 또는 setHidesBackButton : animated :를 호출하여 예제를 시도했지만 모두 성공하지 못했습니다.

아이디어가 있으십니까?

답변

0

발견 : 비어있는 leftBarButton을 설정하면 backButton이 숨겨집니다. 어쩌면 누군가가 더 깨끗한 해결책을 가지고 있을까요?

if(busy) 
    { 
     [self.navigationItem setLeftBarButtonItem:[[[UIBarButtonItem alloc] initWithCustomView:[[UIView new] autorelease]] autorelease] animated:NO]; 
    } 
    else 
    { 
     [self.navigationItem setLeftBarButtonItem:nil animated:NO]; 
    }