【问题标题】:keyboard not shown for uisearchbaruisearchbar 未显示键盘
【发布时间】:2010-11-24 20:38:04
【问题描述】:

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

// 触摸时将触发包含搜索栏的搜索视图的文本字段 - (void)textFieldDidBeginEditing:(UITextField *)textField { [textField resignFirstResponder]; UIViewController *detailViewController = nil; 已实现SearchViewController *searchController = [[ImplementedSearchViewController alloc] initWithNibName:@"ImplementedSearchView" bundle:nil]; ... detailViewController = 搜索控制器; MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; UINavigationController *nav = (UINavigationController *) [delegate.splitViewController.viewControllers objectAtIndex: 0]; NSArray *viewControllers = [NSArray arrayWithObjects:nav, 详细视图控制器,无]; self.splitViewController.viewControllers = viewControllers; HomeViewController *hHomeController = [nav.viewControllers objectAtIndex:0]; // 如果弹出框存在,则关闭它。 if (homeController.popoverController != nil) { [homeController.popoverControllerdismissPopoverAnimated:YES]; } // 配置新视图控制器的弹出按钮 (在显示视图并创建其工具栏/导航栏之后)。 if (homeController.rootPopoverButtonItem != nil) { [详细视图控制器 showRootPopoverButtonItem:homeController.rootPopoverButtonItem]; } [detailViewController 发布]; }

// 在搜索视图的 viewDidLoad 内部 - (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 是一个 UISearchBar [self.searchBar 成为FirstResponder]; }

viewDidLoad中的ui搜索栏不是nil

对此有什么想法吗?

谢谢, 米海

【问题讨论】:

    标签: ipad ios keyboard uisearchbar


    【解决方案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];
    

    }

    有效

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我可以验证,放弃第一响应者以支持搜索栏解决了 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 上不是必需的。

        【讨论】:

          【解决方案4】:
              [self.searchDisplayController setActive: YES animated: YES]; 
              self.searchDisplayController.searchBar.hidden = NO;
              [self.searchDisplayController.searchBar becomeFirstResponder];
          

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

          【讨论】:

            猜你喜欢
            • 2014-11-24
            • 1970-01-01
            • 1970-01-01
            • 2012-10-22
            • 1970-01-01
            • 2012-09-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多