Objective-C UISearchBar可能不响应setContentInset

时间:2011-09-15 21:39:03

标签: objective-c uisearchbar compiler-warnings

包含此警告的应用是否会通过App Store审核?

使用代码,它实际上在iPhone模拟器中呈现,但我应该如何在Xcode中删除上述警告?

2011年9月20日编辑:

我将发布有一天会删除此警告的代码。

2011年10月9日编辑:

这是我的解决方案,因为我找不到任何其他更好更容易的解决方案:

    UIView *extrablue = [[UIView alloc] initWithFrame:CGRectMake(250,0,80,40)];
    extrablue.backgroundColor = RGBCOLOR (95,95,95);
    [self.view addSubview:extrablue];
    mySearchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 250, 40)];
    //[mySearchBar setContentInset: UIEdgeInsetsMake(5,0,5,75)];
    mySearchBar.placeholder = @"Search a term here ... ";
    mySearchBar.backgroundColor = RGBCOLOR (95,95,95);
    mySearchBar.delegate = self;
    //[mySearchBar sizeToFit];
    mySearchBar.autocorrectionType = UITextAutocorrectionTypeNo;
    [mySearchBar setAutocapitalizationType:UITextAutocapitalizationTypeNone];
    [self.view addSubview: mySearchBar];

2 个答案:

答案 0 :(得分:2)

UISearchBar不包含属性contentInset - 这是UIScrollView的属性。如果您的代码要求UISearchBar更改其contentInset,那么这是编码错误,应该删除。

如果你需要进一步的帮助删除它,那么一些额外的代码将是有用的。

答案 1 :(得分:1)

我发现 UISearchBar 响应 setContentInset:方法(在iOS 5.0.1上测试过)。

这导致涉及 NSInvocation:

的软化方法
    if([aSearchBar respondsToSelector:@selector(setContentInset:)]) {
        SEL aSelector = NSSelectorFromString(@"setContentInset:");
        NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[aSearchBar methodSignatureForSelector:aSelector]];
        [inv setSelector:aSelector];
        [inv setTarget:aSearchBar];
        UIEdgeInsets anInsets = UIEdgeInsetsMake(5, 0, 5, 35);
        [inv setArgument:&anInsets atIndex:2]; //arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation
        [inv invoke];
    }

上面的代码使用anInsets参数中指示的CGRect调整UISearchBar(实际上是UITextField)的contentInset的大小。

父if语句(respondsToSelector :)可以避免在新版iOS中对此行为的更改。