2010-11-24 3 views
1

У меня есть UISearchBar, что, хотя это первый ответчик, клавиатура не отображается. Я могу начать печатать на панели поиска с помощью клавиатуры ноутбука, и я вижу, что я набираю в строке поиска, но клавиатура в Simulator и на самом iPad не появляется. Он отлично работал под iOS 3.2, но сегодня утром прекратил работу после обновления до iOS 4.2. Ниже приведен код: клавиатура не показана для uisearchbar

 
// 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]; 
} 

 
// 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]; 
} 

Панель поиска ui в viewDidLoad не является nil.

Любые мысли по этому поводу?

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

ответ

0

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

0

Я могу проверить, что отказ от первого ответчика в пользу поисковой панели решает проблему на 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, с Tab включая UINavigationController покрывающей Searchcontroller к окну вместо)

[searchViewController. searchbar becomeFirstResponder]; 

Нет подсказки, почему это не было необходимо на iPhone.

1

Я показывал строку поиска по текстуFieldDidBeginEditing: (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
[self.searchDisplayController setActive: YES animated: YES]; 
    self.searchDisplayController.searchBar.hidden = NO; 
    [self.searchDisplayController.searchBar becomeFirstResponder]; 

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

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

  • Нет связанных вопросов^_^