6

为什么当 UIViewController 第二次被推送到导航控制器时,UISearchBar 没有获得焦点并且键盘没有出现?似乎整个视图中没有任何元素具有焦点。

我的用例:我有 2 个视图控制器:A 和 B。转换是 A->B。A、B 被推送到导航控制器。

  1. 当我第一次显示 B时,焦点设置为搜索栏并且键盘出现。确定。
  2. 然后我回到A。又从A->B。现在第二次没有焦点也没有出现键盘。这是错误的。

我的代码:在 B UIViewController IBOutlet 上创建到搜索栏的连接:

@property (weak, nonatomic) IBOutlet UISearchBar *mySearchBar;

还设置了 mySearchBar 的委托。我在方法中将焦点放在 B UIViewController 中的搜索栏上viewDidAppear

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];   
    [self performSelector:@selector(setCorrectFocus) withObject:NULL afterDelay:0.2];
}

-(void) setCorrectFocus {
     [self.mySearchBar becomeFirstResponder];
}

控制器之间的转换是在如下代码中手动完成的:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryboard" bundle:nil];
AController *a = [storyboard instantiateViewControllerWithIdentifier:@"A"];
[self.navigationController pushViewController:a animated:NO];
4

5 回答 5

4

尝试这个

-(void)viewDidAppear:(BOOL)animated
{
     [super viewDidAppear:animated];   
     [self setCorrectFocus];
}

-(void)setCorrectFocus 
{
     [self.mySearchBar becomeFirstResponder];
}
于 2013-09-12T07:00:26.523 回答
2

经过长时间的搜索,我发现了错误。在故事板中的某个地方,UISearchBar 的旧连接名称为 mySearchbar。我必须纠正的另一件事是方法

- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar;

返回NO,每次我回到以前的控制器。但是下次应该YES可以重新设置焦点在搜索栏上。

于 2013-09-12T09:28:54.563 回答
2

正在苦苦挣扎 - 在 UITextView 的键盘附件中有一个 UISearchBar ,即使在[self.searchBar becomeFirstResponder]被调用之后,文本视图仍然接收到键盘输入。

这是最终的帮助:

[self.searchBar.window makeKeyAndVisible];

显然,键盘附件是与 UITextField 不同的 UIWindow 的一部分。

注意:要继续在文本视图中输入,您应该调用类似[self.textView.window makeKeyAndVisible];...

于 2014-05-21T13:49:09.360 回答
0

您是否尝试过添加self.mySearchBar.delegate = self;

于 2013-09-12T01:30:32.737 回答
-1

你应该在你的财产中使用 strong

@property (strong, nonatomic) IBOutlet UISearchBar *mySearchBar;

始终在您的 IBOutlet 属性中设置强。当你从 navigationController 弹出 B 时,mySearchBar 已经释放,所以你推回 B,[self.mySearchBar becomeFirstResponder] 不起作用。

于 2013-09-12T02:37:44.197 回答