如何在表头中实现SearchBar NOT

时间:2016-01-03 22:09:45

标签: ios swift uitableview uisearchcontroller

我正在尝试将搜索功能实施到我的应用中。 我曾经阅读并观看了几个教程,并且他们都建议将搜索栏放到表头:

self.tableView.tableHeaderView = self.searchController.searchBar

搜索效果很好,但是有一个问题:当我滚动表格时,搜索栏会离开屏幕:

enter image description here

这不是我想要的。我想像iPhone联系人一样进行搜索。

有什么想法吗?

可能有一个选项可以阻止tableHeader向外滚动(例如,当您可以看到此部分中的任何单元格时,部分标题会保留在屏幕上)

3 个答案:

答案 0 :(得分:4)

如果您的父控制器有一个UINavigationController,您可以将搜索栏粘贴在导航栏中,如下所示:

for(int i = 0; i < sentence.length(); i++){
    if (isVowel(sentence.charAt(i))){
        count++;
        System.out.print(sentence.charAt(i));
    }
}
System.out.println(" There are " + count + " vowels in this sentence.");

或者,您可以在屏幕顶部创建一个空白的UIView,并将UITableView放在它下面。然后将UISearchController的搜索栏添加为空白视图的子视图,如How do I set the UISearchController's searchBar to a view that isn't the tableHeaderView or navigationItem.titleview?中所述。

答案 1 :(得分:0)

您可以使用 -

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

在节标题上添加搜索栏的方法。如果只有一个部分,那么我认为这对你有用。

答案 2 :(得分:0)

可以通过以下方式快速完成:

首先,如果您不想在开始在搜索栏中书写时隐藏导航栏,请写下以下行:

public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
if (holder instanceof HeaderViewHolder) {
    HeaderViewHolder headerHolder = (HeaderViewHolder) holder;
    headerHolder.headerFlag.setText("Flag");
    headerHolder.headerCountry.setText("Country");
    headerHolder.headerPopulation.setText("Population");
    headerHolder.headerCountry.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(mContext, "You clicked at Header View!", Toast.LENGTH_SHORT).show();
        }
    });
} else if (holder instanceof FooterViewHolder) {
    ((FooterViewHolder) holder).footerFlag.setText("Footer");
} else if (holder instanceof ItemViewHolder) {
    ItemViewHolder itemViewHolder=(ItemViewHolder)holder;
    position = position -1;
    Glide.with(mContext).load(mArrayList.get(position).getImagePath()).into(itemViewHolder.imageViewCountryFlag);
    itemViewHolder.textViewCountryName.setText(mArrayList.get(position).getCountry());
    itemViewHolder.textViewcountryPopulation.setText(mArrayList.get(position).getPopulation());
}}

然后将搜索栏分配给navigationItem标题视图:

    searchController.hidesNavigationBarDuringPresentation = false;