use*_*517 14 iphone objective-c uisearchbardelegate ios4
我有一个UIViewController这是一个UISearchBarDelegate和MKMapViewDelegate.该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)
告诉我是否有效