2014-10-16 2 views
0

현재 상태 표시 줄이 표시된 UIViewController 하위 클래스가 있습니다.상태 표시 줄을 표시 한 다음 버튼 누름으로 숨기기

[self setNeedsStatusBarAppearanceUpdate]; 

을 그리고 내가이 문 구현 : 사용자가 버튼을 탭, 내가 작성한 UIView 서브 클래스를 표시하는 메소드를 호출

- (UIStatusBarStyle)preferredStatusBarStyle 
{ 
    return UIStatusBarStyleLightContent; 
} 

viewDidLoad에서 나는 다음과 같은 전화 . 모든 메서드는 하위 클래스에 alpha 속성을 1로 설정하여 화면에 표시되도록합니다.

내 문제는 내가이 UIView 하위 클래스를 표시 할 때마다 상태 표시 줄을 숨기고 싶습니다.

나는 컨트롤러와 뷰 서브 클래스 모두에서 다음 호출 시도 :

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; 

상태 표시 줄을 숨 깁니다하지 않습니다. 다음은 모두 컨트롤러의 상태 표시 줄을 숨기 때문에 분명히 나는 ​​다음과 같은 일반 메서드를 사용할 수 없습니다, 나는 단지 내가보기 서브 클래스 표시 할 때 그것을 숨기려 : 방법에

- (BOOL)prefersStatusBarHidden { 
      return YES; 
    } 

어떤 아이디어 나는 이것을 할 수 있니? 나는 UIViewControllerUIView을 나타내는 nib 파일을 사용하고 있습니다.

답변

0

왜 그냥 속성을 만들고 해당 세터를 오버라이드 (override), 예를 들어하지 않습니다

(인터페이스)

(구현)

@property (nonatomic, assign) BOOL statusBarHidden;

- (void)setStatusBarHidden:(BOOL)statusBarHidden 
{ 
    if (_statusBarHidden != statusBarHidden) 
    { 
     _statusBarHidden = statusBarHidden; 
     [self setNeedsStatusBarAppearanceUpdate]; 
    } 
} 

및 필요에 따라 설정하십시오.

는 다음과 같이 상태 표시 줄 숨겨진 뷰 컨트롤러 방법을 수정

좋은 생각이다
- (BOOL)prefersStatusBarHidden 
{ 
    return self.statusBarHidden; 
} 
+0

, 나는 이미 아무것도가 게시되지 않은 경우 실행 계획 한 일. 나는 내가 그런 방식으로 접근하여 뭔가 잘못하고 있다고 가정하고 그것이 완벽하게 작동하도록하기 위해 호출 할 수있는 방법이있을 것이라고 생각한다. – user3344977

+0

글쎄, 당신은 UIViewController의 사용자 정의 서브 클래스를 만들고 그것을 상속 한 모든 뷰 컨트롤러에 대해이 기능을 구현할 수 있습니다. 또는 심지어 objc 런타임을 사용하여 속성을 추가 한 다음 세터와 getter를 재정의 할 수있는 카테고리를 만들 수도 있습니다. 여전히 UIViewController에서 클래스를 상속받습니다.) 그러나 나는 그들 모두가 다소 해킹 된 것처럼 보이고 실제로 "하나의 라이너"/ 간단한 해결책이 없다는 것에 동의한다. –

+0

당신의 솔루션은 가장 구현하기 쉽고 가장 합리적인 솔루션이다. 건배! – user3344977

관련 문제