键盘未显示为uisearchbar

时间:2010-11-24 20:38:04

标签: ipad ios keyboard uisearchbar

我有一个UISearchBar,即使它是第一个响应者,也没有显示键盘。我可以使用笔记本电脑的键盘在搜索栏中输入,我可以在搜索栏中看到我输入的内容,但模拟器和实际iPad上的键盘没有出现。它在iOS 3.2下工作正常,但在今天早上更新到iOS 4.2后停止工作。 以下是相关代码:

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

viewDidLoad中的ui搜索栏不是nil

对此有何想法?

谢谢, 米哈伊

4 个答案:

答案 0 :(得分:1)

我在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];

}

它有效

答案 1 :(得分:0)

我在不同的地方使用相同的ui搜索栏。它适用于除了两个以外的所有。我认为问题与文本字段有关,而不是作为第一响应者辞职(尽管我在该文本字段上调用了resignFirstResponder)。在其中一个工作的地方,我也使用文本字段来触发搜索栏,但我使用的是选择器而不是文本字段委托方法(例如textFieldDidBeginEditing)。如果我从使用选择器切换到使用委托方法,它将停止工作,我得到相同的问题(键盘没有出现)。我认为,对于它不起作用的两种情况,解决方案是从使用委托方法切换到使用选择器,但事实并非如此。我最终做的是从使用文本字段切换到使用按钮。在某种程度上,如果您不打算在其中写任何内容,使用文本字段没有任何意义(我只是用它来触发搜索栏)。

答案 2 :(得分:0)

我可以验证,让第一响应者辞职以支持搜索栏可以解决iOS 4.3下的iPad问题。在我的情况下,我有一个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上没有必要这样做。

答案 3 :(得分:0)

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

Mann(https://stackoverflow.com/users/871079/mann)的答案对我有用。非常感谢你。