2012-05-15 2 views
2

Я хочу пользовательский контроль UISearchBar в стиле, как показано на рисунке: It's a customed UISearchBar, there is no boarder for the textfield here.удалить границу UITextField в uisearchbar

Сначала я должен удалить вид фона, а затем выяснить UITextfiled в UISearchBar расширьте кадр UITextfiled и удалить его.

Вот мой код:

UITextField *searchField; 

NSUInteger numViews = [self.subviews count]; 
for(int i = 0; i != numViews; i++) { 
    if([[self.subviews objectAtIndex:i] isKindOfClass:[UITextField class]]) { //conform? 
     searchField = [self.subviews objectAtIndex:i]; 
    } 
} 
if(!(searchField == nil)) { 

    [searchField setBorderStyle:UITextBorderStyleNone]; 
    searchField.frame = self.frame; //modify the frame 
} 

[[self.subviews objectAtIndex:0]removeFromSuperview]; //remove the background. 

Результатом является жилец из UITextField еще есть. :(

enter image description here

Мой вопрос: 1.Why я не могу изменить внешний вид UITextField из UISearchBar

2.How удалить границу из UITextField в UISearchBar

?.

Спасибо большое!

ответ

7

Подкласс UISearchBar и переопределить layoutSubViews, чтобы удалить панель поиска фона и границ подвидов текстового поля:

- (void)layoutSubviews 
{  
    [super layoutSubviews]; 

    for (UIView *subview in self.subviews) { 
     // Remove the default background 
     if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) { 
      [subview removeFromSuperview]; 
     } 

     // Remove the rounded corners 
     if ([subview isKindOfClass:NSClassFromString(@"UITextField")]) { 
      UITextField *textField = (UITextField *)subview; 
      for (UIView *subsubview in textField.subviews) { 
       if ([subsubview isKindOfClass:NSClassFromString(@"UITextFieldBorderView")]) { 
        [subsubview removeFromSuperview]; 
       } 
      } 
     } 
    } 
} 
+0

Или если вы не хотите подкласса, поместите это, когда вы/ленитесь/загрузите свой UISearchBar: dispatch_after (dispatch_time (DISPATCH_TIME_NOW, 0.01 * NSEC_PER_SEC), dispatch_get_main_queue(),^(void) {/ * MAGIC ЗДЕСЬ * /}); – Laszlo

0

Я не уверен в этом, однако я подозреваю, что единственный способ, которым вы собираетесь достичь UISearchBar, как и тот, который находится на вашем изображении, - это для создания нового подкласса UISearchBar. Используя это, вы можете настроить его таким образом, чтобы он выглядел точно так же, как на изображении.

This post может помочь вам, если вы решите пойти по маршруту подкласса.

+0

Подкласс способ не работает. Спасибо вам все равно, я думаю, что мне нужно создать свой собственный SearchBar, я не знаю, хорошо ли это. Тем не менее я не понимаю, почему я не могу изменить внешний вид UITextField, как я хочу. Как бы то ни было, спасибо все равно. – biaobiaoqi

+0

biaobiaoqi, вы когда-нибудь находили способ сделать это? Мне нужно сделать что-то вроде этого – LyricalPanda