我有一个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
。
对此有何想法?
谢谢, 米哈伊
答案 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)的答案对我有用。非常感谢你。