Что мне нужно сделать, чтобы адаптировать мое приложение к iOS 5.0, сохраняя совместимость с iOS 4 - PullRequest
5 голосов
/ 14 октября 2011

Я начал играть с iOS 5 сегодня и увидел, что XCode 4.2 позволяет мне выбирать iOS 5 в качестве базового SDK, но не iOS 4.

До сих пор я перезаписывал drawRect: метод вUINavigationBar, чтобы настроить его внешний вид, но iOS 5 больше не вызывает этот метод.Теперь я должен использовать [UINavigationBar внешность], чтобы сделать это (что я думаю, намного лучше).Тем не менее, метод внешнего вида доступен только в iOS 5, поэтому, если я использую его, приложение перестает работать при выполнении в iOS 4. Что мне делать?Нужно ли проверять версию iOS с макросами в каждом месте, где я использую метод iOS 5?

Спасибо,

Ariel

Ответы [ 5 ]

16 голосов
/ 14 октября 2011

Ответ на ваш первый вопрос: вы должны использовать iOS5 (или Last 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 вообще будет в порядке. Но когда этот скомпилированный код будет работать на версии iOS до 5, все будет хорошо.

Как уже было сказано, вы можете оставить свой код drawRect: как есть.

3 голосов
/ 14 октября 2011

Вот еще один способ настроить заголовок:

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

Используя respdsToSelector , вы можете узнать, есть ли здесь функция.

0 голосов
/ 15 октября 2011

Также воспользуйтесь возможностью скачать симуляторы 4.3 для iPhone и iPad. Тогда вы можете потерпеть крах быстрее, если случайно используете iOS 5 на 4.3 --Tom

0 голосов
/ 14 октября 2011

Вы не можете сделать это с макросами, так как оба пути кода должны быть на месте, и правильный маршрут зависит от проверки во время выполнения.

Тааак ... используйте что-то вроде этого:

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

, чтобы получить версию iOS, на которой вы в данный момент работаете, и выполнить [UINavigationBar внешность] под 5 и более новыми, и вы можете вернуться к drawRect в iOS 4.

0 голосов
/ 14 октября 2011

Вы можете поместить один и тот же кусок кода как в drawRect: который использует iOS 4, так и в прокси, возвращаемый [UINavigationbar Внешний вид]. Два разных пути кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...