2010-11-24 1 views
1

Ich habe eine UISearchBar, dass, obwohl es der Ersthelfer ist, die Tastatur nicht angezeigt wird. Ich kann beginnen, in der Suchleiste mit der Tastatur des Laptops eingeben, und ich kann sehen, was ich in der Suchleiste eingeben, aber die Tastatur im Simulator und auf dem eigentlichen iPad wird nicht angezeigt. Es funktionierte unter iOS 3.2 gut, funktionierte aber nach dem Update auf iOS 4.2 heute Morgen nicht mehr. Unten ist der entsprechende Code: Tastatur nicht für 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]; 
} 

Die ui Suchleiste in viewDidLoad ist nicht nil.

Irgendwelche Gedanken dazu?

Danke, Mihai

Antwort

0

Ich bin die gleiche ui Suchleiste an verschiedenen Orten verwenden. Es funktioniert in allen außer zwei. Ich glaube, dass das Problem damit zu tun hat, dass das Textfeld nicht als Ersthelfer zurücktritt (obwohl ich resignFirstResponder in diesem Textfeld angerufen habe). An einem der Orte, an denen es funktioniert, verwende ich auch ein Textfeld, um die Suchleiste auszulösen, aber ich benutze einen Selektor anstelle einer Textfeld-Delegiertenmethode (z. B. textFieldDidBeginEditing). Wenn ich von der Verwendung eines Selektors zur Verwendung der Delegate-Methode umschalte, funktioniert es nicht mehr und ich bekomme das gleiche Problem (Tastatur wird nicht angezeigt). Ich dachte, dass für die zwei Fälle, in denen es nicht funktioniert, die Lösung wäre, von der Verwendung der Delegate-Methode zu einem Selektor zu wechseln, aber das tat es nicht. Am Ende habe ich von einem Textfeld zur Verwendung einer Schaltfläche gewechselt. In gewisser Weise macht es keinen Sinn, ein Textfeld zu verwenden, wenn Sie nichts darin schreiben (ich benutzte es nur, um die Suchleiste auszulösen).

0

Ich kann bestätigen, dass das Zurücktreten des Erstanwenders zugunsten der Suchleiste das Problem auf einem iPad unter iOS 4.3 löst. In meinem Fall hatte ich einen UIViewController, der auf UIEventSubtypeMotionShake reagierte. Sie mussten explizit resignFirstResponder vor (!) aufrufen, um den UIViewController aus der View-Hierarchie zu entfernen, damit er funktioniert.

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

... 

[someViewController becomeFirstResponder]; 

...

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

... (in meinem Fall habe ich eine Hierarchie einschließlich einer UITabBarController, mit einem Vorsprung einer UINavigationController einschließlich der Searchcontroller an die Fensterabdeckung statt)

[searchViewController. searchbar becomeFirstResponder]; 

Keine Ahnung, warum dies auf dem iPhone nicht notwendig war.

1

Ich zeigte Suchleiste auf TextFieldDidBeginEditing: (UITextField *) TextField Delegate-Methode.

Tastatur wurde nicht angezeigt. Also für das erste resign textField als firstResponder. , d.h.

[textField resignFirstResponder]; 

Dann Methode aufrufen, mit Verzögerung

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

Wo

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

}

Es funktioniert

0
[self.searchDisplayController setActive: YES animated: YES]; 
    self.searchDisplayController.searchBar.hidden = NO; 
    [self.searchDisplayController.searchBar becomeFirstResponder]; 

Diese Antwort von Mann (https://stackoverflow.com/users/871079/mann) hat für mich funktioniert. Vielen Dank.