2012-03-06 47 views
0

目前正在製作一個通用應用程序,其中,我使用drawRect方法在iPhone應用程序的navigationBar上顯示圖像,但我不想在iPad上使用此方法。避免使用drawRect方法爲iPad

我已經創建了一個用於更改UINavigationBar的類別。我在其中做了以下。

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    { 
     // iPad mode ... dont load anything 
    } 
    else 
    { 
     // iphone mode .... use an image 
    } 

之後,它顯示一個黑色的空白空間,而不是iPad的導航欄。對於iPhone,它工作正常。

我試過使用self.navigationController.navigationBar.barStyle = UIBarStyleDefault;在我的Matser & viewDidLoad中的詳細視圖,但它仍然顯示黑色的空白空間。

當設備是iPad時,如何避免drawRect方法調用。

感謝

回答

1

如果你繼承UINavigationBar,你應該只使用右側導航欄類在每個平臺上。換句話說,界面習語檢查應該影響導航欄的創建,而不是它的drawRect:實現。由於您使用的是類別來取代drawRect:實現(您不應該這麼做),因此我認爲您唯一的選擇就是動態方法調整。也就是說,您只能在iPhone/iPod Touch上替換drawRect:

考慮子類UINavigationBar,因爲它更容易,更安全,更清潔。這將幫助您避免兼容性問題。

編輯:提供一個例子,假設你有一個只包含空導航控制器的自定義UINavigationBar子類的nib文件。要做到這一點,請選擇xib編輯器中的導航欄並在檢查器中更改其類。

UINavigationController *navigationController = nil; 

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
    navigationController = [[UINavigationController alloc] init]; 
else { 
    UINib *nib = [UINib nibWithNibName: @"MyNavigationController" bundle: nil]; 
    navigationController = [[[nib instantiateWithOwner: nil options: nil] objectAtIndex: 0] retain]; 
} 

當在iPhone或iPod Touch上運行時,此代碼將從nib文件創建一個導航控制器。

+0

如何才能爲iPhone/iPod touch調用drawRect。 – JiteshW 2012-03-27 10:15:21

+0

@ J61我編輯了答案以包含必要的代碼。 – Costique 2012-03-27 11:49:52

0

如果在方法開始時調用[super drawRect],它將調用默認實現,它將正常繪製UINavigationBar

你不應該做自定義子類的原因是UINavigationController直接實例化它的UINavigationBar,你不能告訴它使用你的子類。

+0

我試着爲iPad調用[super drawRect],但它仍然顯示黑色條。 – JiteshW 2012-03-27 10:14:27