我有一个UIViewController就是一个UISearchBarDelegate和一个MKMapViewDelegatesearchBarSearchButtonClicked事件工作正常,但在ios 4.2中进行测试时,按cancel按钮时不会调用searchbarcancelbuttonclicked。在4.3中,一切正常。我有其他观点与相同的代码和它的工作良好。我已经三次检查了方法签名。
这是和地图视图有关,还是我做了一些明显的错误?
我的.h文件:

@interface MyViewController : UIViewController <UISearchBarDelegate,MKMapViewDelegate,UIAlertViewDelegate>{
MKMapView *mapMainView;
UISearchBar *sBar;

}

@property (nonatomic, retain) UISearchBar *sBar;
@end

我创建搜索栏的方式如下:
sBar = [[[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320.0, 70.0)] autorelease];
sBar.delegate = self;
sBar.showsCancelButton = YES;
[self.view addSubview:sBar];
[sBar becomeFirstResponder];

方法:
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
[searchBar resignFirstResponder];
searchBar.hidden = YES;
}

有人知道为什么会这样吗?

最佳答案

我也有同样的问题。按住“取消”按钮几秒钟就可以了。
我的原因是我在tableview中实现了uitapgesturerecognizer。因此,这优先于搜索栏中的按钮单击或“x”按钮单击。
我的解决方案是将手势识别限制为tableview的backgroundview。我想在你的案子里也会发生类似的事情。尝试将手势识别器限制为所需的最小子视图,并且搜索栏应位于该视图之外。

10-07 23:48