0

我想知道有没有办法实现这样的 UI 功能。正如我们所知,当我们在 xcode 5 中拖入一个搜索栏和 searchDisplay 控件时,我们会得到一组搜索控件,包括一个搜索栏和一个 searchDisplayController。

我不想使用本机搜索栏,而是想使用一个按钮来触发搜索显示控件,就像最新的 facebook 应用程序中的那个一样。

我试图删除搜索栏。但是显示控制直接失败了。我试图在 tableView 中插入搜索栏(我不知道它是否正确)

在此处输入图像描述

- (void)viewDidLoad
{
   [self hideSearchBar];
}

- (void)hideSearchBar
{
    self.UISearchBar.hidden = YES;
     self.UISearchBar.bounds = CGRectMake(0, 0, 0, 0);
}

- (IBAction)SearchClicked:(UIButton *)sender {
    [self.searchDisplayController setActive:YES animated:NO];
    self.UISearchBar.hidden = NO;
}

- (void) searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller
{
   [self hideSearchBar];
}

但它的问题是:

当我取消搜索时,滚动视图不会返回到之前的状态。(隐藏的 searchBar 所在的位置有一个间隙空间)。

而不是看到这个:

在此处输入图像描述

我想在搜索视图中单击取消按钮时看到这一点。

在此处输入图像描述

我该如何解决这个问题?

任何机构都可以为我提供更好的解决方案吗?

谢谢

4

3 回答 3

1

很简单!

 -(void) searchBarCancelButtonClicked:(UISearchBar *)searchBar{
        [self.searchDisplayController setActive:NO animated:YES];
        self.navigationController popToViewController:UIViewControllerA animated:YES;
    }
于 2013-10-25T08:13:59.057 回答
0

基于滚动视图的原始中心创建一个 CGPoint。在 viewDidLoad() 中:

self.originalCenter = scrollView.center;

当您的用户关闭搜索栏时:

- (void)hideSearchBar
    scrollView.center = self.originalCenter;

scrollView 就是你所说的 UIScrollView。

于 2013-10-25T04:32:12.773 回答
0

所以最后不是将 searchBar 控件拖到情节提要中。我正在动态创建和销毁 searchBarControl。

-(void)initialiseSearch
{
    //Start
    searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];

    searchBar.delegate = self;
    searchBar.showsCancelButton = YES;
    searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];

    searchDisplayController.delegate = self;
    searchDisplayController.searchResultsDataSource = self;
    searchDisplayController.searchResultsDelegate = self;

    [self.view addSubview:searchBar];

    searchBar.hidden = YES;
    [searchDisplayController setActive:NO animated:NO];

    //    [self.searchDisplayController.searchResultsTableView registerNib:[UINib nibWithNibName:@"CustomSearch" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"search"];
    //End
}

在视图中调用该方法确实加载。

于 2013-11-11T22:16:24.940 回答