我有一个带UISearchBar的UIViewController。我已通过完成按钮替换了搜索按钮。
但是,当单击搜索栏时,最初会禁用“完成”按钮。这会发生,直到一个人输入任何字符
我想要做的是始终启用此完成按钮,这样如果我点击它我可以立即关闭键盘。
有帮助吗?非常感谢。
我有我的UIViewController
-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
return YES;
}
-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
[searchBar resignFirstResponder];
}
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if (searchBar.text.length == 0)
{
//[self fixOrientation];
[searchBar resignFirstResponder];
}
else
{
NSLog(@"typed");
}
}
-(void)searchBarTextDidBeginEditing:(UISearchBar *)theSearchBar
{
NSLog(@"began"); // this executes as soon as i tap on the searchbar, so I'm guessing this is the place to put whatever solution is available
}
将enableReturnKey自动设置为false
enablesReturnKeyAutomatically
searchBar.enablesReturnKeyAutomatically = false
接受的答案似乎不再起作用了,所以我制作了自己的类别似乎确实有效:
@implementation UISearchBar (enabler)
- (void) alwaysEnableSearch {
// loop around subviews of UISearchBar
NSMutableSet *viewsToCheck = [NSMutableSet setWithArray:[self subviews]];
while ([viewsToCheck count] > 0) {
UIView *searchBarSubview = [viewsToCheck anyObject];
[viewsToCheck addObjectsFromArray:searchBarSubview.subviews];
[viewsToCheck removeObject:searchBarSubview];
if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)]) {
@try {
// always force return key to be enabled
[(UITextField *)searchBarSubview setEnablesReturnKeyAutomatically:NO];
}
@catch (NSException * e) {
// ignore exception
}
}
}
}
对于iOS 8及更高版本,您可以使用
[self.searchBar setReturnKeyType:UIReturnKeyDone];
[self.searchBar setEnablesReturnKeyAutomatically:NO];
请写下面的代码可能对你有所帮助:)
如果您有空字符串,此代码显示搜索按钮。
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
[itemSearchBar setShowsCancelButton:YES];
UITextField *searchBarTextField = nil;
for (UIView *subView in self.itemSearchBar.subviews)
{
for (UIView *sndSubView in subView.subviews)
{
if ([sndSubView isKindOfClass:[UITextField class]])
{
searchBarTextField = (UITextField *)sndSubView;
break;
}
}
}
searchBarTextField.enablesReturnKeyAutomatically = NO;
return YES;
}
在XCode 8.3.3上为iOS 10提供简单易用的解决方案,虽然花了一些时间来弄明白:)
@IBOutlet var searchBar: UISearchBar! {
didSet {
searchBar.returnKeyType = .done
searchBar.enablesReturnKeyAutomatically = false
}
}
将搜索更改为完成。无需在搜索字段中键入任何内容即可启用“完成”。之后 - > searchBar.resignFirstResponder()如下:
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchBar.resignFirstResponder()
}
例如,基于地图应用程序,模式似乎应该是在文本字段附近有一个取消按钮以摆脱键盘。话虽如此,一个建议可能是将一个自定义UIButton
放置在该角落,看起来就像完成按钮。
一种hacky解决方案......
希望这可以帮助!
开始编辑搜索时,最简单的方法和技巧就是空白
-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{
//Add a blank character to hack search button enable
searchBar.text = @" ";}
Swift的扩展:
extension UISearchBar {
var textField: UITextField? {
return getTextField(inViews: subviews)
}
private func getTextField(inViews views: [UIView]?) -> UITextField? {
guard let views = views else { return nil }
for view in views {
if let textField = (view as? UITextField) ?? getTextField(inViews: view.subviews) {
return textField
}
}
return nil
}
}
用法:
searchBar.textField?.returnKeyType = .Done
searchBar.textField?.enablesReturnKeyAutomatically = false