UISearchDisplayController без результатов tableView?

Я недавно начал искать что-то вроде этого для Ruby. На что я натыкался до сих пор:

, Они могли бы быть местами для запуска. К сожалению, я не использовал ни одного из трех достаточно все же для предложения хорошего мнения.

42
задан Zargony 31 July 2009 в 18:44
поделиться

5 ответов

Вы хотите, чтобы клиентский эквивалент $ _ SERVER ['PHP_SELF'] ? Что-то, что всегда будет ссылаться на файл без лишних вещей после расширения?

I ' а также вы должны вернуть 0 результатов при редактировании строки поиска

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    savedSearchTerm = searchString;

    [controller.searchResultsTableView setBackgroundColor:[UIColor colorWithWhite:0.0 alpha:0.8]];
    [controller.searchResultsTableView setRowHeight:800];
    [controller.searchResultsTableView setScrollEnabled:NO];
    return NO;
}

- (void)searchDisplayController:(UISearchDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableView
{
    // undo the changes above to prevent artefacts reported below by mclin
}

, я думаю, вы поймете, что делать дальше

38
ответ дан 26 November 2019 в 23:41
поделиться

этого должно быть достаточно для реализации следующего метода в вашем UISearchDisplayDelegate (который обычно является вашим пользовательским подклассом UITableViewController)

- (BOOL) searchDisplayController: (UISearchDisplayController *) controller shouldReloadTableForSearchString: (NSString *) searchString
{
    [self startMyCustomWebserviceSearchAsBackgroundProcessForString: searchString]; //starts new NSThread
    return NO; 
}

пробовали ли вы это?

2
ответ дан 26 November 2019 в 23:41
поделиться

Вы пробовали это:

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(_lookup:) object:nil];
[self performSelector:@selector(_lookup:) withObject:txt afterDelay:0.20];

Таким образом, если пользователь вводит другой символ в течение 1 / 5сек, вы делаете только один веб-вызов.

19
ответ дан 26 November 2019 в 23:41
поделиться

На основе кода пользователя 182820 ниже приведена моя версия. Я скрываю табличное представление UISearchDisplayController. Когда в поле поиска вводится символ, я помещаю 'dimmed view', так что это выглядит так, как будто 'dimmed view' UISearchDisplayController никогда не исчезал, а затем убираю его, когда поиск завершен. Если ввести несколько символов и нажать отмену, то вид таблицы на короткое время становится полностью белым, и я не знаю, как это обойти.

- (void)viewDidLoad {
    ...
    tableViewMask=[UIView new];
    tableViewMask.backgroundColor = [UIColor blackColor];
    tableViewMask.alpha = 0.8;
}

- (void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller{
    tableViewMask.frame=CGRectMake(self.tableView.frame.origin.x, self.tableView.frame.origin.y+controller.searchBar.frame.size.height, self.tableView.frame.size.width, self.tableView.frame.size.height-controller.searchBar.frame.size.height);
    controller.searchResultsTableView.hidden=YES;
}

- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller{
    [tableViewMask removeFromSuperview];
}

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{
    if (searchString.length==0)
        [tableViewMask removeFromSuperview];
    else 
        [self.tableView addSubview:tableViewMask];
    [searchText autorelease];
    searchText=[searchString retain];
    return NO;
}   
2
ответ дан 26 November 2019 в 23:41
поделиться

Я нашел способ получше, так как есть ошибка с «лучшим ответом» - при прокрутке черной фоновой таблицы будут отображаться разделитель и «Нет результатов».

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {

    controller.searchResultsTableView.backgroundColor = [UIColor blackColor];
    controller.searchResultsTableView.alpha = 0.8;
    controller.searchResultsTableView.separatorStyle = UITableViewCellSeparatorStyleNone;

    for(UIView *subview in tableView.subviews) {
        if([subview isKindOfClass:UILabel.class]) {
            subview.hidden = YES;
        }
    }

    return NO;
}

- (void) searchBarSearchButtonClicked:(UISearchBar *)searchBar {

    self.searchDisplayController.searchResultsTableView.backgroundColor = [UIColor whiteColor];
    self.searchDisplayController.searchResultsTableView.alpha = 1;
    self.searchDisplayController.searchResultsTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;

    for(UIView *subview in tableView.subviews) {
        if([subview isKindOfClass:UILabel.class]) {
            subview.hidden = NO;
        }
    }

    // search results and reload data ....
}
1
ответ дан 26 November 2019 в 23:41
поделиться