2014-10-16 71 views
0

我有一個UIViewController子類,當前顯示一個狀態欄。在viewDidLoad我把以下內容:Dsiplaying狀態欄,然後將其隱藏在按鈕上按

[self setNeedsStatusBarAppearanceUpdate]; 

然後,我還實施了這一說法:

- (UIStatusBarStyle)preferredStatusBarStyle 
{ 
    return UIStatusBarStyleLightContent; 
} 

當用戶點擊一個按鈕,我認爲那是顯示我已經創建了一個UIView子類的方法。所有的方法都是告訴子類將它的alpha屬性設置爲1,這樣它就會出現在屏幕上。

我的問題是,我想隱藏狀態欄,只要我顯示這個UIView子類。

我已經打過電話的控制器和視圖子類以下兩個:

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

狀態欄從不隱藏。很顯然,我不能用常規的方法,如以下,因爲那會完全隱藏在控制器中的狀態欄,我只希望它隱藏,當我顯示的視圖子類:

- (BOOL)prefersStatusBarHidden { 
      return YES; 
    } 

如何任何想法我可以做到這一點?順便說一句,我用nib文件來表示UIViewControllerUIView

回答

0

你爲什麼不只是創建一個屬性並覆蓋其二傳手,例如:

(接口)

@property (nonatomic, assign) BOOL statusBarHidden;

(實施)

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

和根據需要進行設置。

然後修改狀態欄隱藏視圖控制器的方法是這樣的:

- (BOOL)prefersStatusBarHidden 
{ 
    return self.statusBarHidden; 
} 
+0

這是一個偉大的想法,和一個我已經上如果沒有其他被張貼實施計劃。我想我認爲我正在通過這種方式來解決問題,並且可能有一種方法可以讓它完美地工作。 – user3344977 2014-10-16 22:17:34

+0

那麼,你可以製作一個UIViewController的自定義子類,併爲所有繼承它的視圖控制器實現這個功能,或者你甚至可以創建一個類,你可以使用objc運行時添加屬性,然後重寫setter和getters(這樣你就可以仍然讓你的類繼承自UIViewController)。但我同意,他們都看起來有點hacky,真的沒有「單線」/簡單的解決方案:) – 2014-10-16 22:21:29

+0

您的解決方案是最容易實施,最有意義。乾杯! – user3344977 2014-10-16 22:22:39