2011-10-14 11 views
5

Zacząłem grać z iOS 5 już dziś i widziałem, że XCode 4.2 pozwala mi wybrać system operacyjny iOS 5 jako podstawowy pakiet SDK, ale nie system iOS 4.Co należy zrobić, aby dostosować moją aplikację do systemu iOS 5.0 zachowując zgodność z systemem iOS 4

Do tej pory nadpisuję metodę drawRect: in UINavigationBar, aby dostosować jej wygląd, ale iOS 5 nie wywołuje już tej metody. Teraz muszę użyć [UINavigationBar appearance], aby to zrobić (co moim zdaniem jest znacznie lepsze). Jednak metoda wyglądu jest dostępna tylko w systemie iOS 5, więc jeśli użyję jej, moja aplikacja ulegnie awarii podczas wykonywania w systemie iOS 4. Co powinienem zrobić? Czy muszę sprawdzać wersję iOS z makrami w każdym miejscu, w którym używam metody iOS 5?

Dziękuję

Ariel

Odpowiedz

16

Odpowiedź na pierwsze pytanie brzmi: Do podstawowego zestawu SDK należy używać iOS5 (lub najnowszego zestawu SDK systemu iOS), ale należy ustawić minimalną obsługiwaną wersję systemu iOS w obszarze Deployment Target. Możesz tam ustawić iOS4.0 (lub cokolwiek chcesz).

Poprawnym sposobem na zajęcie się drugim pytaniem jest przetestowanie pod kątem zdolności, a nie wersji. Tak, coś jak to będzie działać w powiedzmy metodę 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]; 
} 

Zostaniesz kompilacji to niezgodne z iOS5 SDK, więc korzystanie z appearance w ogóle będzie dobrze. Ale kiedy ten skompilowany kod działa na wersji iOS przed 5, będzie dobrze.

Jak wspomniano wcześniej, można zachować swój kod drawRect: bez zmian.

+0

'[[UINavigationBar class] replysToSelector: @selector (wygląd)]' może być napisany jako '[UINavigationBar odpowiadaToSelektor: @selector (wygląd)]' – user102008

0

Możesz umieścić ten sam kawałek kodu zarówno w drawRect: że iOS 4 i używa proxy zwrócony przez [wyglądem UINavigationBar]. Dwie różne ścieżki kodu.

0

Nie można tego zrobić w przypadku makr, ponieważ obie ścieżki kodu muszą być na miejscu, a właściwa trasa do przejścia zależy od sprawdzenia w czasie wykonywania.

Taaaak ... użyć czegoś takiego:

NSString *os_version = [[UIDevice currentDevice] systemVersion]; 

aby uzyskać wersji iOS aktualnie działa dalej i zrobić wygląd UINavigationBar [] w 5 & nowszy, można spaść z powrotem do drawRect rzecz na iOS 4.

+0

To jest zły pomysł. Technicznie używać wersji systemu operacyjnego będzie działać w większości przypadków, ale nie jest to solidne rozwiązanie. Powiedzmy, że tintColor został dodany do UIBarButtonItem w iOS 5, przestarzały w iOS 6 i usunięty w iOS 7. Aplikacje zainstalowane z wersją iOS 5 przestałyby działać poprawnie w hipotetycznym iOS 7. Oczywiście, możesz wydać aktualizacje w czasie, które dodają dodatkowe warunki i złożoność, ale dlaczego nie po prostu użyć - [odpowiadaToSelektor:] i nie martwić się o przeszłość LUB przyszłość? –

3

Innym sposobem na spersonalizowanie twojego nagłówka jest właśnie to.

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]; 
} 

Używanie respondsToSelector można wiedzieć, czy funkcja jest tutaj.

0

Skorzystaj również z pobierania symulatorów 4.3 dla iPhone'a i iPada. Wtedy możesz szybko się zawiesić, gdy przypadkowo użyjesz rzeczy iOS 5 na 4.3 - Tom

+0

Oni używali do obsługi wielu zestawów SDK, ale domyślam się, że już ich nie ma. –

Powiązane problemy