Iphone “搜索栏取消”按钮不工作
我的应用程序有一个搜索栏,用于从由sqlite DB填充的表视图中搜索记录。 我的问题是,当视图打开时,“取消”按钮没有启用,而且我不能触摸它,就像一个图像一样。它在那里,但没有任何操作。 当我们点击搜索栏上的文本时,取消按钮将被更改为“完成”,它是启用的。 这是我的代码 这是我的搜索栏视图,请参见“取消”按钮。它未启用Iphone “搜索栏取消”按钮不工作,iphone,objective-c,cocoa-touch,uisearchbar,Iphone,Objective C,Cocoa Touch,Uisearchbar,我的应用程序有一个搜索栏,用于从由sqlite DB填充的表视图中搜索记录。 我的问题是,当视图打开时,“取消”按钮没有启用,而且我不能触摸它,就像一个图像一样。它在那里,但没有任何操作。 当我们点击搜索栏上的文本时,取消按钮将被更改为“完成”,它是启用的。 这是我的代码 这是我的搜索栏视图,请参见“取消”按钮。它未启用 - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { //[newSearchBar setS
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
//[newSearchBar setShowsCancelButton:YES animated:YES];
newSearchBar.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;
NSLog(@"search begin edit") ;
//searchString = searchBar.text;
//NSLog(@"print did edit searchstring : %@", searchString) ;
for(UIView *view in [searchBar subviews])
{
//shareItemId =newSearchBar.text;
if([view isKindOfClass:[NSClassFromString(@"UINavigationButton") class]]) {
[(UIBarItem *)view setTitle:@"Done"];
}
}
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
NSLog(@"searchBarTextDidEndEditing:");
[searchBar resignFirstResponder];
//[self dismissModalViewControllerAnimated:YES];
}
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
NSLog(@"searchBarSearchButtonClicked");
searchString = searchBar.text;
NSLog(@"search %@", searchBar.text);
[newSearchBar setShowsCancelButton:NO animated:YES];
[searchBar resignFirstResponder];
//[self dismissModalViewControllerAnimated:YES];
}
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
NSLog(@" searchBarCancelButtonClicked");
[searchBar resignFirstResponder];
shareItemName =newSearchBar.text;
[self dismissModalViewControllerAnimated:YES];
}
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
NSLog(@"searchBarShouldBeginEditing");
[newSearchBar setShowsCancelButton:YES animated:YES];
return YES;
}
这些是我的代表
请检查我的密码并给我答案。我需要启用“取消”按钮时,视图加载,它的行动将返回到以前的看法
我需要这样
或者,我怎样才能在令人兴奋的取消按钮上添加另一个取消按钮。这样我就可以启用。请给我所有详细信息我猜苹果制作UISearchBar的方式是,如果搜索文本字段为空或不是第一响应者,取消按钮将被禁用 这是有意义的,因为除了实际取消搜索外,您不应该将“取消”按钮用于其他目的。由于没有要取消的搜索,该按钮被禁用 如果您仍然希望在显示视图时按钮立即处于活动状态,您可以在
视图中调用它:
到[mySearchBar becomeFirstResponder]代码>
这将导致显示键盘,并启用按钮。
然后,如果用户点击cancel,您可以截取它返回到上一个视图。(我不确定苹果是否会喜欢这种行为)
示例代码:
-(void) viewWillAppear : (BOOL) animated
{
[super viewWillAppear:animated];
// Make keyboard pop and enable the "Cancel" button.
[self.mySearchBar becomeFirstResponder];
}
您需要将UISearchDisplayController设置为活动状态,如下所示:
[mySearchDisplayController setActive:YES animated:YES];
或者更简单地说:
mySearchDisplayController.active = YES;
下面是我为始终启用“取消”按钮所做的操作,即使搜索字段不是第一响应者
每当我在搜索字段上调用resignFirstResponder
时,我都会调用此方法
- (void)enableCancelButton {
for (UIView *view in self.searchBar.subviews) {
if ([view isKindOfClass:[UIButton class]]) {
[(UIButton *)view setEnabled:YES];
}
}
}
这是可行的,但我不确定它是否会通过应用商店验证,所以使用它的风险自负。此外,这可能仅在“取消”按钮是您在搜索字段中使用的唯一按钮时才起作用。从iOS 8开始,这可用于重新启用“取消”按钮:
private func enableButtonsInSubviews(view: UIView) {
if let view = view as? UIButton {
view.enabled = true
}
for subview in view.subviews {
enableButtonsInSubviews(subview)
}
}
方法searchBarCancelButtonClicked
是否被调用?@7KV7-如果按钮被禁用,它怎么能被调用?我猜UISearchBar的行为是在搜索文本字段不是first responder时禁用cancel按钮。您可以按中所述手动强制启用它。它不起作用…我不知道为什么。我认为这是不可能的,我不希望在单击搜索栏标签文本之前先拔出键盘..因为谓词当点击搜索栏标签文本时,在表格中启用搜索功能。我只需要向上拉键盘。这绝对是可能的,因为我试过了,它成功了。但是如果你不想让键盘出现,除了制作自己的“搜索栏”,我看不到其他选择。只要一个文本字段,旁边有一个按钮,你们就都准备好了。这会不会产生和成为第一响应者一样的效果?意味着,键盘会弹出?不,我不这么认为-成为第一响应者是控制键盘的因素。为什么这不能通过应用商店验证,你使用的都是公共API。这项技术似乎不再有效,因为self.searchBar.subview没有任何UIButton。我刚刚在iOS 8.x上进行了尝试/测试。