iPhone UISearchBar完成按钮始终启用

我有一个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  
}  

如今UISearchBar符合UITextInputTraits 。 你可以简单地设置:

searchBar.enablesReturnKeyAutomatically = NO;

警告:虽然这为iOS 7.0编译,它将在运行时崩溃 。 它只适用于> = 7.1。

这个文档并不清楚,因为从7.1开始, UISearchBar实现了UITextInputTraits协议,但是由于哪个iOS版本采用了UITextInputTraits协议,所以没有注明。


您可以绕过UISearchBar中的子视图,直到找到文本字段。 然后只需将“enabledReturnKeyAutomatically”设置为NO即可。 顺便提一句,以下代码对设置键盘类型也很有用。

  // loop around subviews of UISearchBar
  for (UIView *searchBarSubview in [searchBar subviews]) {    
    if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)]) {    
      @try {
        // set style of keyboard
        [(UITextField *)searchBarSubview setKeyboardAppearance:UIKeyboardAppearanceAlert];

        // always force return key to be enabled
        [(UITextField *)searchBarSubview setEnablesReturnKeyAutomatically:NO];
      }
      @catch (NSException * e) {        
        // ignore exception
      }
    }
  }

接受的答案似乎不再适用,所以我做了我自己的类似的工作:

@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
            }
        }
    }
}
链接地址: http://www.djcxy.com/p/44281.html

上一篇: iphone UISearchBar Done button always enabled

下一篇: What exactly a responder means?