UISearchBar委托没有响应取消按钮

use*_*517 14 iphone objective-c uisearchbardelegate ios4

我有一个UIViewController这是一个UISearchBarDelegateMKMapViewDelegate.该searchBarSearchButtonClicked事件工作正常,但在iOS 4.2中测试时,在点击取消按钮时,不会调用searchBarCancelButtonClicked.在4.3中一切正常.我有相同代码的其他视图,它工作正常.我已经三次检查了方法签名.

它可能与MapView有关,还是我做了一些明显的错误?

我的.h文件:

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

}

@property (nonatomic, retain) UISearchBar *sBar;
@end
Run Code Online (Sandbox Code Playgroud)

我创建搜索栏如下:

sBar = [[[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320.0, 70.0)] autorelease];
sBar.delegate = self;
sBar.showsCancelButton = YES;
[self.view addSubview:sBar];
[sBar becomeFirstResponder];
Run Code Online (Sandbox Code Playgroud)

方法:

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
[searchBar resignFirstResponder];
searchBar.hidden = YES;
}
Run Code Online (Sandbox Code Playgroud)

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

小智 21

我有同样的问题.按住取消按钮几秒钟.

我的原因是我在tableview中实现了UITapGestureRecognizer.因此,这优先于按钮单击或搜索栏中的"x"按钮单击.

在我的情况下,解决方案是将手势识别限制为仅仅查看tableview的backgroundview.我猜你的情况可能会发生类似的事情.尝试将手势识别器限制为所需的最小子视图,搜索栏应位于该视图之外.


小智 4

可能您的 sbar 对象正在释放,在本例中是一个自动释放对象,为什么?尝试将 sBar 声明为 IBOutlet 属性。在 Interface Builder 中创建适当的链接,在编码时删除分配,放入 viewDidUnload self.sbar = nil; 并在 dealloc 中释放它。在 viewDidLoad 中放置这个。

sBar.delegate = self;
sBar.showsCancelButton = YES; // this is an option in object inspector
[self.view addSubview:sBar];
[sBar becomeFirstResponder]; //remove this.
Run Code Online (Sandbox Code Playgroud)

告诉我是否有效