2011-03-02 2 views
1

Я хочу реализовать этотIpad: интеллектуальный поиск в пироге

1), когда пользователь может начинать ввод в текстовом поле а поповер мигает и показывает список элементов в виде таблицы в пироге в соответствии с введенной строкой в текстовое поле.

2) Кроме того, эти данные должны быть обновлены при каждом вводе новой буквы.

вид прогностического поиска.

Пожалуйста, помогите мне с этим и предложите возможные способы его реализации.

ответ

1

Похоже, у вас уже есть хорошая идея о реализации. Мое предложение состояло в том, чтобы представить UITableView в popover с панелью поиска вверху, а затем просто вывести источник данных табличного представления с использованием поискового запроса и вызвать reloadData в представлении таблицы каждый раз, когда пользователь вводит в поле.

7

UISearchDisplayController делает большую часть тяжелой работы для вас.

Поместите на ваш взгляд UISearchBar (не UITextField) и подключите к нему UISearchDisplayController.

// ProductViewController.h 
@property IBOutlet UISearchBar *searchBar; 
@property ProductSearchController *searchController; 

// ProductViewController.m 
- (void) viewDidLoad 
{ 
    [super viewDidLoad]; 

    searchBar.placeholder = @"Search products"; 
    searchBar.showsCancelButton = YES; 

    self.searchController = [[[ProductSearchController alloc] 
            initWithSearchBar:searchBar 
            contentsController:self] autorelease]; 
} 

Я обычно подкласс UISearchDisplayController и иметь его как собственный делегат, searchResultsDataSource и searchResultsDelegate. Последние два управляют таблицей результатов обычным образом.

// ProductSearchController.h 
@interface ProductSearchController : UISearchDisplayController 
      <UISearchDisplayDelegate, UITableViewDelegate, UITableViewDataSource> 

// ProductSearchController.m 
- (id)initWithSearchBar:(UISearchBar *)searchBar 
       contentsController:(UIViewController *)viewController 
{ 
    self = [super initWithSearchBar:searchBar contentsController:viewController]; 

    self.contents = [[NSMutableArray new] autorelease]; 
    self.delegate = self; 
    self.searchResultsDataSource = self; 
    self.searchResultsDelegate = self; 

    return self; 
} 

Каждое нажатие в SearchBar вызывает searchDisplayController:shouldReloadTableForSearchString:. Быстрый поиск может быть реализован непосредственно здесь.

- (BOOL) searchDisplayController:(UISearchDisplayController*)controller 
      shouldReloadTableForSearchString:(NSString*)searchString 
{ 
    // perform search and update self.contents (on main thread) 
    return YES; 
} 

Если ваш поиск может занять некоторое время, сделать это в фоновом режиме с NSOperationQueue. В моем примере ProductSearchOperation будет вызывать showSearchResult:, когда и если он будет завершен.

// ProductSearchController.h 
@property INSOperationQueue *searchQueue; 

// ProductSearchController.m 
- (BOOL) searchDisplayController:(UISearchDisplayController*)controller 
     shouldReloadTableForSearchString:(NSString*)searchString 
{ 
    if (!searchQueue) { 
     self.searchQueue = [[NSOperationQueue new] autorelease]; 
     searchQueue.maxConcurrentOperationCount = 1; 
    } 

    [searchQueue cancelAllOperations]; 
    NSInvocationOperation *op = [[[ProductSearchOperation alloc] 
      initWithController:self 
      searchTerm:searchString] autorelease]; 
    [searchQueue addOperation:op]; 

    return NO; 
} 

- (void) showSearchResult:(NSMutableArray*)result 
{ 
    self.contents = result; 
    [self.searchResultsTableView 
      performSelectorOnMainThread:@selector(reloadData) 
      withObject:nil waitUntilDone:NO]; 
} 
+0

В интерфейсе строителя, UISearchBar кажется стиле появляться (как называется) в панели инструментов, в то время, как UITextField стилизовано, чтобы хорошо выглядеть на пустой странице. Есть ли способ сделать UISearchBar, который не должен находиться в «баре» - например, если вы хотите иметь несколько текстовых полей с поддержкой поиска на странице? – radven

+0

@radven Вы должны спросить об этом на верхнем уровне вопроса на сайте. –

+0

Выполнено - отправлено здесь: http://stackoverflow.com/questions/10792578/making-a-uisearchbar-a-drop-in-replacement-for-a-uitextfield – radven

Смежные вопросы