【问题标题】:How to Show and Hide UISearchDisplayController's UISearchBar如何显示和隐藏 UISearchDisplayController 的 UISearchBar
【发布时间】:2013-12-15 07:51:07
【问题描述】:

我有一个位于导航右侧的按钮搜索。 这是我的代码:

UIButton *btnSearch = [UIButton buttonWithType:UIButtonTypeCustom];
btnSearch.frame = CGRectMake(0, 0, 22, 22);
[btnSearch setImage:[UIImage imageNamed:@"search_btn.png"] forState:UIControlStateNormal];
[btnSearch addTarget:self action:@selector(showSearch:) forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *searchItem = [[UIBarButtonItem alloc] initWithCustomView:_btnSearch];

self.navigationItem.rightBarButtonItems = searchItem ;

这就是它的外观。

我想在点击搜索按钮后显示搜索栏,点击取消后将其关闭,然后返回导航栏,但我不知道如何编码。

- (IBAction)showSearch:(id)sender{
    ???
}

这就是我想要的。

请帮助或提供一些示例代码。我真的需要它。

感谢阅读。

【问题讨论】:

    标签: objective-c uinavigationbar uisearchbar uisearchdisplaycontroller


    【解决方案1】:

    将属性UISearchBar *mySearchBar 添加到您的viewController 中

    @property(nonatomic, retain) UISearchBar *mySearchBar;

    符合UISearchBarDelegate

    @interface HomeViewController () <UISearchBarDelegate>
    ...
    ...
    @end
    

    然后将showSearch方法实现为

    -(void)showSearch:(id)sender {
    if(!mySearchBar) {
        mySearchBar = [[UISearchBar alloc] init];
        [mySearchBar setFrame:CGRectMake(0, 0, self.view.frame.size.width, 55)];
        [mySearchBar setShowsCancelButton:YES animated:YES];
        [self.view addSubview: mySearchBar];
        mySearchBar.delegate = self;
        self.navigationController.navigationBarHidden = YES;
    }else {
        searchBar.alpha = 1.0;
        self.navigationController.navigationBarHidden = YES;
    }
    

    然后将搜索栏委托方法实现为:

     - (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar {
            self.navigationController.navigationBarHidden = NO;
            [mySearchBar setAlpha:0.0];
        }
    

    希望您通过这样做得到了这个想法。如果需要,您也可以将其直接添加到导航控制器本身,然后单独显示/隐藏searchBar

    您可以将其添加到导航控制器,就像初始化 mysearchBar 并将其添加到 navigationBar 一样:

       UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:mySearchBar];
       self.navigationItem.rightBarButtonItem = searchBarItem;
    

    【讨论】:

    • 非常感谢。现在是工作。但是,如何让它成为响应者,这样我就不必点击文本框搜索了。我的意思是当用户点击导航栏中的搜索按钮然后在文本框搜索中显示带有闪烁光标的 mySearchbar !谢谢^^
    • 您必须告诉系统您希望您的搜索栏成为第一响应者。因此,只需将此行添加到显示搜索栏的代码中即可。在上面的代码中,您可以在 if-else 块之后添加它。 (或将其添加到 if 和 else 块中)。 [mySearchBar becomeFirstResponder];
    • 搜索取消按钮运行良好。单击取消按钮时,它将隐藏搜索栏,然后返回导航栏。如何通过不单击取消按钮来退出搜索栏?我的意思是即使用户点击文本框搜索的外侧(如(结果列表))。谢谢
    • 有很多逻辑方法可以做到这一点。这取决于你想要哪一个。例如:您可以在触摸搜索结果表或视图时调用取消按钮逻辑。您还可以拥有一个具有清晰颜色的隐藏 UIView 并向其添加点击手势,然后在隐藏视图的点击上您可以调用相同的取消按钮逻辑。
    猜你喜欢
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多