Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UISearchBar实现_Ios_Objective C - Fatal编程技术网

Ios UISearchBar实现

Ios UISearchBar实现,ios,objective-c,Ios,Objective C,我的应用程序中有一个搜索栏,但当我在模拟器中运行它时,它不允许我在搜索字段中键入内容 在我的代码中,搜索栏在xib文件中创建,然后作为map view的子视图(以编程方式)添加,以便它位于地图的顶部。我的搜索栏的部分代码: [mapView addSubview: searchBar]; searchBar.placeholder = @"Search or Place Pin"; searchBar.searchBarStyle = UISearchBarStyleProminent; sea

我的应用程序中有一个搜索栏,但当我在模拟器中运行它时,它不允许我在搜索字段中键入内容

在我的代码中,搜索栏在xib文件中创建,然后作为map view的子视图(以编程方式)添加,以便它位于地图的顶部。我的搜索栏的部分代码:

[mapView addSubview: searchBar];
searchBar.placeholder = @"Search or Place Pin";
searchBar.searchBarStyle = UISearchBarStyleProminent;
searchBar.backgroundImage =[[UIImage alloc]init];
searchBar.barTintColor = [UIColor clearColor];
searchBar.delegate = self;

-(void) viewDidAppear:(BOOL)animated{
...
[searchBar becomeFirstResponder];
BOOL searchBarIsResponding = [searchBar becomeFirstResponder];
NSLog(@"first responder: %d", searchBarIsResponding);

....        
- (void) searchBarButtonClicked:(UISearchBar *)searchBar
{
[self searchCoordinatesForAddress:[searchBar text]];
[searchBar resignFirstResponder];
}
编辑:
我尝试将mapView的userInteractionEnabled设置为否,以查看是否是mapView未将其触摸传递给搜索栏的问题,但我仍然无法键入搜索栏,因此我认为这不是问题所在。

如果您的mapView是另一个视图的子视图,我会将搜索栏作为该视图的子视图。否则,您是否检查过搜索栏是否成为第一响应者?可能是地图视图没有将触摸传递到其子视图,因此搜索栏没有成为第一响应程序,因此您无法键入。我希望这能有所帮助,很遗憾我还不能发表评论,所以我不得不基于假设创建此答案,如果我误解了,请告诉我。

如果您的地图视图是另一个视图的子视图,我会将搜索栏作为该视图的子视图。否则,您是否检查过搜索栏是否成为第一响应者?可能是地图视图没有将触摸传递到其子视图,因此搜索栏没有成为第一响应程序,因此您无法键入。我希望这能有所帮助,很遗憾我还不能发表评论,因此我不得不根据假设创建此答案,如果我误解了,请告诉我。

您试图在搜索栏上添加点击手势,如果您使用的是delegate=self,则不需要此手势;包括UISearchBarDelegate并重写其相关方法。但是,即使您想要点击手势,您的选择器也会出错,因为您分配了一个没有参数的选择器,但使用了-(void)searchBarButtonClicked:(UISearchBar*)searchBar所以我最初没有点击手势,它仍然不允许我在搜索栏中键入。如果我删除点击手势并将代码返回到原来的状态,我需要更改什么?覆盖其相关方法是什么意思?您试图在搜索栏上添加点击手势,如果您使用的是delegate=self,则不需要该手势;包括UISearchBarDelegate并重写其相关方法。但是,即使您想要点击手势,您的选择器也会出错,因为您分配了一个没有参数的选择器,但使用了-(void)searchBarButtonClicked:(UISearchBar*)searchBar所以我最初没有点击手势,它仍然不允许我在搜索栏中键入。如果我删除点击手势并将代码返回到原来的状态,我需要更改什么?覆盖其相关方法是什么意思?这是否意味着我的地图视图需要一个点击手势识别器,然后将触摸传递到搜索栏?因为当前mapview没有点击手势识别器如果我正确理解文档-否。当mapview获得点击时,它会识别并相应地处理它-在这种情况下,它应该告诉搜索栏它被点击了。此外,当前识别的手势似乎覆盖了键盘的显示,因为当你点击它时,你会告诉它再次退出第一响应者。我建议移除手势识别器,然后看看是否可以键入文本。如果没有,添加一个功能,检查搜索栏是否已成为第一响应者。顺便问一下,您是否正在实施“UISearchBarDelegate”协议?因此我删除了搜索栏的点击手势识别器,但它仍然不允许我键入。我将尝试添加一个函数,看看searchBar是否已成为第一响应者。不,我没有实现UISearchBarDelegate协议……所以我添加了以下语句:[searchBar becomeFirstResponder];BOOL searchBarIsResponding=[searchBar becomeFirstResponder];NSLog(@“第一响应者:%d”,SearchBarisResponse);我得到了false——为什么它不会成为FirstResponder呢?我现在已经将上述语句(searchBar becomeFirstResponder…)移动到ViewDidDisplay,打印日志返回true。但是,我仍然无法键入文本字段?这是否意味着我的地图视图需要有一个点击手势识别器,然后将触摸传递到搜索栏?因为当前mapview没有点击手势识别器如果我正确理解文档-否。当mapview获得点击时,它会识别并相应地处理它-在这种情况下,它应该告诉搜索栏它被点击了。此外,当前识别的手势似乎覆盖了键盘的显示,因为当你点击它时,你会告诉它再次退出第一响应者。我建议移除手势识别器,然后看看是否可以键入文本。如果没有,添加一个功能,检查搜索栏是否已成为第一响应者。顺便问一下,您是否正在实施“UISearchBarDelegate”协议?因此我删除了搜索栏的点击手势识别器,但它仍然不允许我键入。我将尝试添加一个函数,看看searchBar是否已成为第一响应者。不,我没有实现UISearchBarDelegate协议……所以我添加了以下语句:[searchBar becomeFirstResponder];BOOL searchBarIsResponding=[searchBar becomeFirstResponder];NSLog(@“第一响应者:%d”,SearchBarisResponse);我得到了false——为什么它不会成为FirstResponder呢?我现在已经将上述语句(searchBar becomeFirstResponder…)移动到ViewDidDisplay,打印日志返回true。但是,我仍然无法在文本字段中键入?