UISearchDisplayController ürününü, UITableViewController ürününe InterfaceBuilder ürününe ekledim. Tablo için veri dizisini yeniden üreten ve reloadData
'u çağıran bir searchBar: searchBar textDidChange: searchText
yöntemi ekleyerek çalışmasını sağlamak çok kolaydı.UISearchDisplayController kullanarak arama nasıl yüklenir veya başlatılır?
Ancak, arama çubuğunda kullanıcılar bir dahaki sefere daha önceki arama gösterisine sahip olmak isterim çünkü (X) 'e dokunmak ve tekrar yazmaktan daha kolaydır. Ama bunu yapamıyorum.
- (void) searchBar: (UISearchBar *) searchBar textDidChange: (NSString *) searchText {
if(searchText && [searchText length] > 0) {
self.displayedRows = [[NSMutableArray initWithCapacity: 1];
for(NSString *l in self.allRows) {
NSRange r = [l rangeOfString: searchText];
if(r.location != NSNotFound)
[self.displayedRows addObject: l];
}
[self.searchDisplayController.searchResultsTableView reloadData];
}
}
- (void) searchDisplayControllerWillBeginSearch: (UISearchDisplayController *) controller {
if(self.lastSearch && [self.lastSearch length] > 0) {
controller.searchBar.text = self.lastSearch;
[controller.searchResultsTableView reloadData];
}
}
- (void) searchDisplayControllerWillEndSearch: (UISearchDisplayController *) controller {
self.lastSearch = controller.searchBar.text;
self.displayedRows = self.allRows;
[self.tableView reloadData];
}
son arama metin Aramayı dokunma ve ben 'imleci' bile sonunda yerleştirilmiş olduğunu şaşırdı ama bir dahaki sefere bar arayışında uygun olduğunu Aşağıda denedim kodudur arama sonuçları gösterilmiyor, sadece arama alanının boş olduğu gibi orijinal içeriğin karanlık görünümü. Bir karakteri yazdığım anda arama sonuçları güncellenir. Ben her birine [self.searchDisplayController.searchResultsTableView reloadData]
eşdeğer koyarak denedim
:
searchDisplayControllerDidBeginSearch: (UISearchDisplayController *) controller
searchDisplayController: (UISearchDisplayController *) controller didLoadSearchResultsTableView: (UITableView *) tableView
searchDisplayController: (UISearchDisplayController *) controller willShowSearchResultsTableView: (UITableView *) tableView
searchDisplayController: (UISearchDisplayController *) controller didShowSearchResultsTableView: (UITableView *) tableView
Ama hiç fark ... bir şey yazana kadar sadece boş yaptı.
Önceden yüklenmiş bir arama sonucunu nasıl alacakları konusunda herhangi bir fikri olan var mı? başka bir değişiklik yapmanız gerekiyorsa
- (void) searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller {
if(lastSearch.length > 0) {
NSLog(@"In searchDisplayControllerDidBeginSearch");
[self.searchDisplayController.searchBar setText:lastSearch];
}
}
, şimdi açacak kadar UIKit
başlıkları UISearchBar.h
ve UISearchDisplayController.h
ve nerede meşgul ederek ne bakarak önermek:
İnanılmaz, tüm farklı willBegins ve didBegins olası her kombinasyonu denedim sanıyordum ama ben sadece önceki arama testi her zaman arama alanında olduğu için 'reloadData 'parçası hareket ediyordum. – LavaSlider
Denedim, denedim gibi, 'controller.searchBar.text = self.lastSearch' hareket ettirmeyi önerdi ve presto, işe yaramaz (ki bu biraz karanlık-flaşın sahip olmaması hoş olurdu). "ReloadData" ye ihtiyaç duymuyorum bile. Teşekkürler. – LavaSlider
(Oh, ve çok fazla NSLog vardı). Yöntemler girip çıkarken ve alan içeriği ve dizi boyutlarını gösterirken onları aldım ... sadece güncellenmez). – LavaSlider