UISearchBar作为键盘的一部分?

时间:2011-11-10 19:15:01

标签: iphone uinavigationcontroller uisearchbar

我在底部工具栏上有一个UISearchBar。问题是键盘一旦点击它就会掩盖它。我试图想办法解决这个问题。我尝试将它添加到顶部,但由于我使用的是UINavigationController,因此我遇到了一些意想不到的行为。 (就像键盘在屏幕上并且没有恢复到原始大小时,rightBarButtonItem的customView中的UISearchBar会延长,当按下键盘时整个NavigationBar会离开屏幕,所以你甚至看不到你输入的是什么那种情况要么。)

所以作为一种解决方法,我以为我可以在工具栏的右下角有用于搜索的systemIcon,然后当键盘弹出时,搜索栏可以成为键盘的一部分,然后你可以看到什么你输入。有谁知道我会怎么做?谢谢。

3 个答案:

答案 0 :(得分:2)

来自Apple的HIG for IOS:

  

在列表中显示 列表中的搜索栏或列表中的索引。用户期待   在这个位置找到一个搜索栏,因为他们习以为常   联系人和其他应用程序中的搜索栏。进行搜索   此位置的栏表示它在用户的方式时不受影响   他们滚动列表或使用索引,但是   在需要时可以方便地使用。

可能在屏幕底部显示搜索栏并不意味着; )

将UISearchbar置于自定义ViewController的顶部应该可以正常工作。 也许分享一些代码?

答案 1 :(得分:1)

铍正在走上正轨。这里有一些代码可以帮助你实现目标。

  1. 将搜索栏移出屏幕,以便在按下按钮之前无法看到
  2. 注册keyboardWillShow通知
  3. 按下按钮时,将搜索栏设为“becomeFirstResponder”
  4. 将搜索栏从底部(视图外)移动到键盘上方(视图中)
  5. //

    //in viewDidLoad register for notifications
     [self registerForKeyboardNotifications];
    
    //in viewdidload hide the search bar
    CGRect rect = searchBar.frame;
    rect.origin.y = 480;
    searchBar.frame = rect;
    
    //own function register for keyboardwillshow
    - (void)registerForKeyboardNotifications
    {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
    }
    
    
    //when button is pushed move the searchbar into view. you may have to play with the pixels a bit to make sure it lands on top, and flush
    
    - (void)keyboardWillShow:(NSNotification*)aNotification
    {
    
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3];
    CGRect rect = searchBar.frame;
    rect.origin.y = 180; //adjust the 180 to get it to land where you want
    searchBar.frame = rect;
    [UIView commitAnimations];
    }
    
    
    //own function hide the search bar when the keyboard is dismissed
    - (void)keyboardWillHide:(NSNotification*)aNotification
    {
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3];
    CGRect rect = searchBar.frame;
    rect.origin.y = 480;
    searchBar.frame = rect;
    [UIView commitAnimations];
    
    }
    

答案 2 :(得分:0)

我看到了这项任务的几个解决方案。简而言之,您创建了一个UISearchBar / UIToolbar,为UIKeyboardWillShowNotification添加了观察者,当此通知触发动画时,您创建了UISearchBar / UIToolbar 0.3秒。链接:

  1. Programatically align a toolbar on top of the iPhone keyboard
  2. Building an iPhone keyboard toolbar
  3. Add toolbar on top of keyboard