2013-01-03 17 views
5

Chcę zmienić wygląd UISearchBar: Więczrobić UITextField funkcjonować jak UISearchBar

Jeżeli istnieje sposób, za pomocą którego mogę uczynić mój UITextField (w niestandardowym tle poszukiwaniu), aby działać jak UISearchBar? lub podklasowanie i przesłanianie - (void)layoutSubviews jest jedynym sposobem?

Uprzejmie proszę powiedzieć, jak ją podklasować !!!

Odpowiedz

6

można zmienić tło UISearchBar za pomocą tego kodu miech ..

for (UIView *subview in searchBar.subviews) { 
     if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) { 
      UIView *bg = [[UIView alloc] initWithFrame:subview.frame]; 
      bg.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"SkyBackground.jpeg"]]; 
      [searchBar insertSubview:bg aboveSubview:subview]; 
      [subview removeFromSuperview]; 
      break; 
     } 
    } 

Od tego kodu można ustawić zdjęcie lub cokolwiek innego na tle UISearchBar.

zobaczyć także moje tę odpowiedź z innej funkcji, aby zmienić układ podzespołów searchbar .. How to change inside background color of UISearchBar component on iOS

UPDATE:

zmian Anuluj wygląd przycisk Użyj tego kodu miech ...

UIButton *cancelButton = nil; 

    for(UIView *subView in searchBar.subviews) 
    { 
     if([subView isKindOfClass:[UIButton class]]) 
     { 
      cancelButton = (UIButton*)subView; 
      //do something here with this cancel Button 
     } 
    } 
+0

zmienia tle, ale rozmiar i textField i lupy i przycisk Anuluj wciąż tam są. Dlatego chciałem, aby niestandardowe pole tekstowe działało jak UIseachBar – Nil

+0

po prostu ustaw całe tło jako czyste, a także nie jest w stanie wyświetlić przycisku anulowania ..means enabled = NO –

+0

podobnie jak [searchbar setShowsCancelButton: NO]; użyj tej linii, aby ukryć przycisk anulowania i po prostu zrób coś z tym kodem otrzymasz dane wyjściowe, które chcesz ,,, zobacz także moją odpowiedź, którą zamieszczam link powyżej .. możesz uzyskać coś z tego .. nadzieję, że pomógł ci. . :) –

1

Spróbuj

self.TextFieldSearch = (UITextField *)[self.Search.subviews lastObject]; 
    [self.TextFieldSearch removeFromSuperview]; 
    [self.view addSubview:self.TextFieldSearch]; 
    self.TextFieldSearch.delegate = self; 
    self.TextFieldSearch.font = [UIFont systemFontOfSize:10]; 
    self.TextFieldSearch.keyboardAppearance = UIKeyboardAppearanceAlert; 
    [self.Search removeFromSuperview]; 
0

Zmiana tła UIsearchBar jest jednym ze sposobów uzyskania dostosowanego paska UISearchBar. Ale jeśli chcesz ograniczyć funkcjonalność przeszukiwania tabeli, możesz mieć normalny tekst Field i podłączyć przycisk wyszukiwania, aby przefiltrować wyniki tableview w innej tablicy i zaktualizować tabledata za pomocą tej tablicy.

UIsearchBar na - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText jest niemal równoznaczne z UItextField's valieChanged IBAction

6

Jest również możliwe przy użyciu UITextFieldDelegates

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{  
NSString *searchString; 
if (string.length > 0) {   
    searchString = [NSString stringWithFormat:@"%@%@",textField.text, string]; 
} else { 
    searchString = [textField.text substringToIndex:[textField.text length] - 1]; 
} 
NSPredicate *filter = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] %@", searchString]; 
resultArray = [[resultTempArray filteredArrayUsingPredicate:filter] mutableCopy]; 

if (!searchString || searchString.length == 0) { 

    resultArray = [resultTempArray mutableCopy]; 
} else { 
    if (resultArray.count == 0) { 
NSLog(@"No data From Search"); 
    } 
}  
[tableView reloadData];  
return YES; 
} 
+0

thnQ stary, naprawdę mam ten sam pomysł, ale jeszcze nie zaimplementowany, ale po zobaczeniu twojego tylko potwierdziłem, że mój pomysł jest poprawny, a także jest mała zmiana w pobliżu ZAWIERA powinna być SAMYM ZAWIERA, w przeciwnym razie zawiesi się ..... – ashokdy

0

Ok, mam ten sam problem, a ja podklasy UISearchBar! Tutaj można przejść

- (void) layoutSubviews { 

[super layoutSubviews]; 
UITextField *searchField = nil; 
    for (UIView *subview in self.subviews) { 
     if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) { 
      [subview removeFromSuperview]; 
     } 

     if ([subview isKindOfClass:[UITextField class]]) { 
      searchField = (UITextField *)subview; 
      searchField.leftViewMode = UITextFieldViewModeNever; 
      [searchField setValue:[UIFont systemFontOfSize:8] forKeyPath:@"_placeholderLabel.font"]; 
      [searchField setBackground: [UIImage imageNamed:@"images.png"] ]; 
       searchField.clearButtonMode = UITextFieldViewModeNever; 
     } 

} 
self.showsCancelButton = NO; 
} 

When entering text

1

Filtrowanie przy użyciu UITextField metod delegata

#pragma mark - UITEXTFIELD DELEGATE METHODS - 

- (BOOL)textFieldShouldReturn:(UITextField *)textField{ 
    [textField resignFirstResponder]; 
    return YES; 
} 

- (BOOL)textFieldShouldClear:(UITextField *)textField{ 
    arrFilterSearch = nil; 
    arrFilterSearch = [NSMutableArray arrayWithArray:arrSearch]; 
    UITableView *tblView = (UITableView *)[self.view viewWithTag:tblView_Tag]; 
    [tblView reloadData]; 
    return YES; 
} 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 
    NSString *searchKey = [textField.text stringByAppendingString:string]; 
    arrFilterSearch = nil; 
    searchKey = [searchKey stringByReplacingCharactersInRange:range withString:@""]; 
    if (searchKey.length) { 
      NSPredicate *pred = [NSPredicate predicateWithFormat:@"firstname contains[cd] %@", searchKey]; 
      arrFilterSearch = [NSMutableArray arrayWithArray:[arrSearch filteredArrayUsingPredicate:pred]]; 
    } 
    else 
     arrFilterSearch = [NSMutableArray arrayWithArray:arrSearch]; 

    UITableView *tblView = (UITableView *)[self.view viewWithTag:tblView_Tag]; 
    [tblView reloadData]; 
    return YES; 
}