Клавиатура UISearchBar не вылезает из поля зрения, когда в iOS 4 выбрана ячейка - PullRequest
2 голосов
/ 10 июля 2010

У меня есть tableView с UISearchBar. Перед обновлением до iOS 4, когда пользователь выбрал ячейку и был нажат новый viewController, клавиатура выскользнула из таблицы слева от таблицы.

Теперь он просто остается на экране поверх нового представления. Если я позвоню [mySearchBar resignFirstResponder]; Я могу избавиться от клавиатуры, но анимация неловкая, потому что она скользит по нижней части экрана во время нажатия нового представления.

Кто-нибудь знает, почему поведение было бы другим в iOS 4? Как мне привязать клавиатуру к табличному представлению, чтобы она соскользнула с экрана при нажатии на новое представление?

Спасибо!

EDIT: Вот некоторая дополнительная информация. У меня есть панель пользователя за панелью навигации. Он выдвигается, когда пользователь нажимает кнопку. Я добавляю uisearchbar так:

[self.navigationController.view insertSubview:self.mySearchBar belowSubview:self.navigationController.navigationBar];

Я полагаю, поскольку на самом деле панель навигации фактически не перемещается к следующему представлению (хотя панель поиска делает это), клавиатура остается на месте.

Я пытался создать пользовательский интерфейс за таблицей и добавить к нему панель поиска, но не смог заставить его работать из-за UINavigationController и моей структуры кода.

1 Ответ

1 голос
/ 30 июля 2010

Лично я бы порекомендовал реализовать SearchBar, который использует UISearchDisplayController.Я думаю, что это реализует стандартный шаблон, используемый xCode, и обрабатывает все респонденты действительно гладко.Вот пример метода, который вы можете попробовать скопировать в свой код и выполнить, используя

[self addSearchBar:@"enter search keywords here" hasScope:NO]

Рекомендуемый код:

- (void) addSearchBar:(NSString*)placeholder hasScope:(BOOL)aScope {


    UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
    [searchBar sizeToFit];

    //searchBar.delegate = self;
    searchBar.placeholder = placeholder;
    self.tableView.tableHeaderView = searchBar;

    if (aScope==YES){
        searchBar.showsScopeBar = YES;
        searchBar.scopeButtonTitles = [NSArray arrayWithObjects:@"Flags",@"Listeners",@"Stations",nil];     
    }




    UISearchDisplayController *searchDC = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];

    // The above assigns self.searchDisplayController, but without retaining.
    // Force the read-only property to be set and retained. 
    [self performSelector:@selector(setSearchDisplayController:) withObject:searchDC];

    //searchDC.delegate = self;
    //searchDC.searchResultsDataSource = self;
    //searchDC.searchResultsDelegate = self;

    [searchBar release];
    [searchDC release];

}
...