为什么 UISearchBar 即使在设置为第一响应者后也无法获得焦点



为什么UIView控制器第二次推送到导航控制器时UISearchBar没有获得焦点并且键盘没有出现?似乎整个视图中没有一个元素有重点。

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

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

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

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

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

-(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];

试试这个

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

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

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

返回NO,每次我回到以前的控制器。但它应该返回YES以便下次能够在搜索栏上设置焦点。

正在努力解决相同的问题 - 在 UITextView 的键盘附件中有一个 UISearchBar,即使在调用[self.searchBar becomeFirstResponder]后,文本视图仍然接收键盘输入。

这是最终有所帮助的:

[self.searchBar.window makeKeyAndVisible];

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

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

您是否

尝试过添加self.mySearchBar.delegate = self;

你应该在你的属性中使用强

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

始终为您的IBOutlet设置强大的财产。当你从navigationController弹出B时,mySearchBar已经释放,所以你推回B,[self.mySearchBar be成为FirstResponder]不起作用。

最新更新