[英]iOS: Siri does not list my iOS payments app when I ask Siri “What can you do?”
[英]What should I do to adapt my app to iOS 5.0 keeping compatibility with iOS 4
我今天開始使用iOS 5,並且看到XCode 4.2僅允許我選擇iOS 5作為基本SDK,而不能選擇iOS 4。
到目前為止,我已經覆蓋UINavigationBar中的drawRect:方法以自定義其外觀,但是iOS 5不再調用該方法。 現在,我必須使用[UINavigationBar外觀]來做到這一點(我認為這要好得多)。 但是,外觀方法僅在iOS 5中可用,因此如果我在iOS 4上執行我的應用程序時會崩潰,該怎么辦? 我在使用iOS 5方法的每個地方都需要在宏中檢查iOS版本嗎?
謝謝,
愛麗兒
第一個問題的答案是:您必須使用iOS5(或最新的iOS SDK)作為基本SDK,但在“部署目標”下設置最低支持的iOS版本。 您可以在其中設置iOS4.0(或任何您想要的)。
解決第二個問題的正確方法是測試功能而不是版本。 因此,類似這樣的方法適用於您的application:didFinishLaunchingWithOptions:
方法:
// iOS5-only to customize the nav bar appearance
if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) {
UIImage *img = [UIImage imageNamed: @"NavBarBackground.png"];
[[UINavigationBar appearance] setBackgroundImage:img forBarMetrics:UIBarMetricsDefault];
}
然后,您將根據iOS5 SDK進行編譯,因此完全可以使用appearance
。 但是,當此編譯代碼在5之前的iOS版本上運行時,就可以了。
如前所述,您可以按原樣保留drawRect:
代碼。
自定義標題的另一種方法是這樣的。
UIImage *image = [UIImage imageNamed:@"header.png"];
if([navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
//iOS 5 new UINavigationBar custom background
[navigationBar setBackgroundImage:image forBarMetrics: UIBarMetricsDefault];
}
else{
UIImageView *imgView = [[[UIImageView alloc] initWithImage:image] autorelease];
[imgView setUserInteractionEnabled:NO];
[imgView setTag:TOOLBAR_TAG];
[navigationBar insertSubview:imgView atIndex:0];
}
使用responsToSelector,您可以知道該函數是否在此處。
您可以在iOS 4使用的drawRect和[UINavigationbar外觀]返回的代理中放入相同的代碼。 兩種不同的代碼路徑。
您不能使用宏來執行此操作,因為兩個代碼路徑都必須存在,並且正確的路徑取決於運行時檢查。
太...使用這樣的東西:
NSString *os_version = [[UIDevice currentDevice] systemVersion];
要獲得您當前正在運行的iOS版本並在5及更高版本下進行[UINavigationBar外觀],您可以使用iOS 4上的drawRect功能。
還可以利用下載適用於iPhone和iPad的4.3模擬器的優勢。 然后,當您在4.3 --Tom上意外使用iOS 5內容時,可以更快崩潰
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.