клавиатура не показана для панели пользователя - PullRequest
1 голос
/ 24 ноября 2010

У меня есть UISearchBar, что, хотя это первый респондент, клавиатура не отображается.Я могу начать печатать в строке поиска, используя клавиатуру ноутбука, и я вижу, что я печатаю внутри панели поиска, но клавиатура в симуляторе и на реальном iPad не появляется.Он работал нормально под iOS 3.2, но перестал работать после обновления до iOS 4.2 сегодня утром.Ниже приведен соответствующий код: </p> <pre> // Text Field that when touched will fire a search view that contains the search bar - (void)textFieldDidBeginEditing:(UITextField *)textField { [textField resignFirstResponder]; UIViewController *detailViewController = nil; ImplementedSearchViewController *searchController = [[ImplementedSearchViewController alloc] initWithNibName:@"ImplementedSearchView" bundle:nil]; ... detailViewController = searchController; MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; UINavigationController *nav = (UINavigationController *) [delegate.splitViewController.viewControllers objectAtIndex: 0]; NSArray *viewControllers = [NSArray arrayWithObjects:nav, detailViewController, nil]; self.splitViewController.viewControllers = viewControllers; HomeViewController *hHomeController = [nav.viewControllers objectAtIndex:0]; // Dismiss the popover if it's present. if (homeController.popoverController != nil) { [homeController.popoverController dismissPopoverAnimated:YES]; } // Configure the new view controller's popover button (after the view has been displayed and its toolbar/navigation bar has been created). if (homeController.rootPopoverButtonItem != nil) { [detailViewController showRootPopoverButtonItem:homeController.rootPopoverButtonItem]; } [detailViewController release]; } </pre> <p></p> <pre> // Inside the viewDidLoad of the search view - (void)viewDidLoad { self.table.frame = CGRectMake(table.frame.origin.x, table.frame.origin.y, table.frame.size.width, 680); self.table.backgroundColor = [UIColor colorWithRed:239/255.0 green:244/255.0 blue:255/255.0 alpha:1.0]; // searchBar is a UISearchBar [self.searchBar becomeFirstResponder]; } </pre> <p> Панель поиска пользовательского интерфейса в viewDidLoad не nil.

Есть мысли по этому поводу?

Спасибо, Михай

Ответы [ 4 ]

1 голос
/ 22 мая 2013

Я показывал панель поиска на textFieldDidBeginEditing: (UITextField *) метод делегата textField.

Клавиатура не показывается. Так что для этого сначала подайте в отставку textField как firstResponder. т.е.

[textField resignFirstResponder];

Затем вызвать метод с задержкой

[self performSelector:@selector(callSearchBar) withObject:NULL afterDelay:0.2];

Где

-(void)callSearchBar{
[self.searchDisplayController setActive: YES animated: YES]; 
self.searchDisplayController.searchBar.hidden = NO;
[self.searchDisplayController.searchBar becomeFirstResponder];

}

Работает

0 голосов
/ 05 июня 2014
    [self.searchDisplayController setActive: YES animated: YES]; 
    self.searchDisplayController.searchBar.hidden = NO;
    [self.searchDisplayController.searchBar becomeFirstResponder];

Этот ответ от Манна (https://stackoverflow.com/users/871079/mann) сработал для меня. Большое спасибо.

0 голосов
/ 04 мая 2011

Могу убедиться, что отставка первого респондента в пользу поисковой панели решает проблему на iPad под iOS 4.3. В моем случае у меня был UIViewController, отвечающий на UIEventSubtypeMotionShake. Вы должны были явно вызвать resignFirstResponder до (!) удаление UIViewController из иерархии представления, чтобы он работал.

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if (motion == UIEventSubtypeMotionShake){
    ...
    }
}

...

[someViewController becomeFirstResponder];

...

[someViewController resignFirstResponder];
[[someViewController view ] removeFromSuperview];

... (в моем случае я добавил иерархию, включающую UITabBarController, с вкладкой, включающей в себя UINavigationController, охватывающий Searchcontroller, вместо окна)

[searchViewController. searchbar becomeFirstResponder];

Понятия не имею, почему это не нужно на iPhone.

0 голосов
/ 25 ноября 2010

Я использую одну и ту же панель поиска пользовательского интерфейса в разных местах. Это работает во всех, кроме двух. Я считаю, что проблема связана с тем, что текстовое поле не уходит в качестве первого респондента (хотя я вызвал resignFirstResponder для этого текстового поля). В одном из мест, где это работает, я также использую текстовое поле для запуска панели поиска, но я использую селектор вместо метода делегата текстового поля (такого как textFieldDidBeginEditing). Если я переключаюсь с использования селектора на метод делегата, он перестает работать, и я получаю ту же проблему (клавиатура не появляется). Я думал, что для двух случаев, когда это не работает, решение будет состоять в том, чтобы перейти от использования метода делегата к использованию селектора, но это не сработало. В итоге я переключился с использования текстового поля на кнопку. В некотором смысле, не имеет никакого смысла использовать текстовое поле, если вы не собираетесь в него что-либо писать (я использовал его только для вызова панели поиска).

...