繁体   English   中英

为什么UISearchBar即使在被设置为第一响应者之后也没有获得焦点?

[英]Why UISearchBar does not get Focus even after it is set as a first responder?

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

我的用例 :我有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中的搜索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];

试试这个

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM