2014-03-13 4 views
0
UITextField * textField= self.textField; 
textField.background = [UIImage resizeableImageWithCapInsets2:UIEdgeInsetsMake(0, 7, 0, 7) withName:@"Search-Field"]; 

간단한 코드.7.1에서이 코드가 더 이상 작동하지 않는 이유는 무엇입니까?

2014-03-13 09:31:02.099 isikota[179:60b] -[BGSearchBar setBackground:]: unrecognized selector sent to instance 0x17566b20 
2014-03-13 09:32:17.720 isikota[179:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[BGSearchBar setBackground:]: unrecognized selector sent to instance 0x17566b20' 

이치에 맞지 않습니다.

-(UITextField *) textField 
{ 
    UIView * textFieldView = [self findASubViewWithProtocol:@protocol(UITextInputTraits)]; 

    return (UITextField *)textFieldView; 
} 

이 더 이상 UISearchBar에서 TextField를 얻을 수있는 방법이 될 것 같다 : 분명히 배경은 문제가 I이 사용하는 것을 나는 발견에 textField

의 속성입니다. 어떻게 그럴 수 있니?

나는 문제가

return (UITextField *)textFieldView; 

이 런타임 오류를 반환하지 않습니다 왜 지금 textFieldView 더 이상 UITextField에

의 서브 클래스
+1

오류 메시지는'textField'는'BGSearchBar'입니다. – Pang

+0

알아. 보이는 7.1 UIView * textFieldView = [self findASubViewWithProtocol : @protocol (UITextInputTraits)]; uisearchbar를 반환하십시오. –

답변

2

내가이기 때문에 7.1 [UISearchBar conforms to UITextInputTraits]

는 또한 궁금하지 않기 때문에 생각 항상 다음과 같이했습니다.

for (UIView* v in self.searchbar.subviews) { 
    if ([v isKindOfClass: [UITextField class]]) { 
     return v; 
    } 
} 

또는 iOS 7 :

for (UIView* v in [self.searchbar.subviews[0] subviews]) { 
    if ([v isKindOfClass: [UITextField class]]) { 
     return v; 
    } 
} 

더 이상 작동하지 않습니까?

+0

검색 창 안의 텍스트 필드에 직접 액세스 할 수 없다는 사실이 어리석은 것을 인정해야합니다. 우리는 그것이 어딘가에 있다는 것을 압니다! – matt

+0

두 번째 솔루션이 더 좋습니다. 'subviews [0]'는 향후 업데이트에서'subviews [1] [0]'이 될 수 있기 때문에 재귀 알고리즘은 더욱 탄력적입니다. –

+0

@AaronBrager 두 가지 중 어느 것도 재귀 적입니다. 둘 다 서브 레벨의 단일 레벨만을 점검하는 단순 루프입니다. 둘 다 언젠가는 깨질 가능성이 있습니다. – rmaddy

관련 문제