我正在尝试将搜索功能实施到我的应用中。 我曾经阅读并观看了几个教程,并且他们都建议将搜索栏放到表头:
self.tableView.tableHeaderView = self.searchController.searchBar
搜索效果很好,但是有一个问题:当我滚动表格时,搜索栏会离开屏幕:
这不是我想要的。我想像iPhone联系人一样进行搜索。
有什么想法吗?
可能有一个选项可以阻止tableHeader向外滚动(例如,当您可以看到此部分中的任何单元格时,部分标题会保留在屏幕上)
答案 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;