2012-01-19 70 views
1

我有我目前的基础sdk设置为iOS 4.2。 我有这样的方法:基地sdk 4.3给出了错误,但5.0并没有给出任何错误

- (void) setNavigationBarBackground 
    { 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9) { 
     //iOS 5.0 
     if ([self respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) 
     { 
      [self setBackgroundImage:[UIImage imageNamed:kImageNavBar] forBarMetrics:UIBarMetricsDefault]; 
     } 
    } 
    else 
    { 
     //iOS 4.whatever and below 
     UIImageView *imageView = (UIImageView *)[self viewWithTag:kNavigationBarBackgroundImageTag]; 
     if (imageView == nil) 
     { 
      imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:kImageNavBar]]; 
      [imageView setTag:kNavigationBarBackgroundImageTag]; 
      [self insertSubview:imageView atIndex:0]; 
      [imageView release]; 
     } 
    } 
} 

当我建立我的项目,我遇到一个编译时错误为:

'UIBarMetrics' Default undeclared (first use in this function) 

当我将基地SDK为5.0,它编译没有任何错误。

有谁知道如何使用base sdk 4.2编译它?

回答

4

对于具体的情况下,使用此:

#if defined(__IPHONE_5_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_5_0 
if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]){ 
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"TitleBar"] forBarMetrics:UIBarMetricsDefault]; 
} 
#endif 

在一般情况下,一个很好的方式在不同的SDK版本有条件地编译是这样的:

把这个顶部(连同进口):

#define SYSTEM_VERSION_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) 
#define SYSTEM_VERSION_GREATER_THAN(v)    ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) 
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 
#define SYSTEM_VERSION_LESS_THAN(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) 
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending) 

然后,如果有一些操作系统特定的功能,使用起来就像这样(我使用AlertView例如,预iOS5的,UIAlertView中不支持内部自定义的TextView它,所以我有我自己的自定义AlertView。在iOS5中,该黑客不工作,我有,因为它支持自定义textViews)使用UIAlertView中:

if (SYSTEM_VERSION_LESS_THAN(@"5.0")) { 

TextAlertView *alert = [[TextAlertView alloc] initWithTitle:@"xxxYYzz" 
                message:@"" 
                delegate:self cancelButtonTitle:@"Add" 
              otherButtonTitles:@"Cancel", nil]; 
alert.textField.keyboardType = UIKeyboardTypeDefault; 
alert.tag = 1; 
self.recipeNameTextField = alert.textField; 
[alert show]; 
[alert release]; 
} 
else { 
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"xxYYzz" 
              message:@"" 
              delegate:self cancelButtonTitle:@"Add" 
            otherButtonTitles:@"Cancel", nil]; 
    alert.alertViewStyle = UIAlertViewStylePlainTextInput; 
    self.recipeNameTextField = [alert textFieldAtIndex:0]; 

    [alert show]; 
    [alert release]; 
} 

希望它可以帮助

+0

gr8工作Anshu。 Thanx亚尔。 :) – anshul

0

将您的“基础SDK”设置为“最新的iOS”。

将“iOS部署目标”设置为您希望支持的最低版本,本例中为“iOS 4.2”。

+0

没有老板,其给予同样的错误 “UIBarMetricsDefault”未申报 – anshul

+0

咦,但你说,如果你设置基础sdk为5.0,它“编译好”... – gerry3

+0

雅当我设置基础sdk 5.0(与部署目标4.0),然后编译好,但是当我编译它使用基础sdk 4.2 (ios部署目标4.0以及4.2),那么它给我这个特别的错误 – anshul

相关问题