IOS MONO UITableViewConntroler Add UISearchBar

为原来的应用中的项目列表添加搜索条并且实现搜索方法。

IOS MONO UITableViewConntroler Add UISearchBar

当中动用到的几个类:

UITableViewController(外层的类,列表显示的类)

UITableViewSource(数据源,列表中行和分组数据获取的地方)

UITableViewCell(单元格不多介绍,我的应用中搜索得到单元和平时使用的单元风格不一样功能也不一样,搜索得到的项目不能执行除了打开外的其他操作)

UISearchBar (搜索框

UISearchDisplayController(搜索框的显示控制器

 

TableViewController要实现两个接口 IUISearchBarDelegate,IUISearchDisplayDelegate

IOS MONO UITableViewConntroler Add UISearchBar
public class DiagramsViewController:UITableViewController,IUISearchBarDelegate,IUISearchDisplayDelegate
IOS MONO UITableViewConntroler Add UISearchBar

 

UITableViewController中声明好变量

 

IOS MONO UITableViewConntroler Add UISearchBar
1 private UISearchBar searchBar;
2 private UISearchDisplayController searchDisplayController;
IOS MONO UITableViewConntroler Add UISearchBar

 

初始化,关键在于委托和数据的绑定,还有就是搜索条要放在TableView的 TableHeaderView里

 

 

IOS MONO UITableViewConntroler Add UISearchBar
 1 protected virtual void InitializeSearchBar()
 2 {
 3     searchBar = new UISearchBar (new RectangleF(0,0,this.TableView.Bounds.Width,50));
 4     searchBar.Placeholder = "Search for Diagrams";
 5     searchDisplayController = new UISearchDisplayController (searchBar, this);
 6 
 7 
 8     searchDisplayController.WeakDelegate = this;
 9     var sts = new SearchTableSource (this);
10     searchDisplayController.SearchResultsWeakDataSource = sts;
11     searchDisplayController.SearchResultsWeakDelegate = sts;
12 
13     TableView.TableHeaderView = searchBar;
14 }
IOS MONO UITableViewConntroler Add UISearchBar

 

现在界面已经出现了UISearchBar可是不能够使用无论你输入什么搜索是没有结果的。

IOS MONO UITableViewConntroler Add UISearchBar

 

 

 

在UITableViewConroller中实现SearchReload方法,用一个数组来存储过滤后的数值。

 

IOS MONO UITableViewConntroler Add UISearchBar
 1         public void FilterContentForSearchText(string searchText)
 2         {
 3             filteredProjects  = Projects.Where (p => p.FileName.IndexOf(searchText,StringComparison.CurrentCultureIgnoreCase) >= 0).ToArray();
 4         }
 5 
 6 
 7         [Export ("searchDisplayController:shouldReloadTableForSearchString:")]
 8         public bool ShouldReloadForSearchString (MonoTouch.UIKit.UISearchDisplayController controller, string forSearchString)
 9         {
10             FilterContentForSearchText (forSearchString);
11             return true;
12         }
IOS MONO UITableViewConntroler Add UISearchBar

 

当然就算你实现了方法也依旧不能搜索到数据,因为UITableViewSource没有修改,当你在TableViewsource加了判断时结果就会出来~

我是对搜索使用自己实现新的  SearchTableSource,而不是原来的 UITableViewSource。

SearchBarController绑定的也是自己实现的SearchTableSource,所以当搜索时SearchBarController会向自己实现的SearchTableSource获取数据。

 

IOS MONO UITableViewConntroler Add UISearchBar
 1         protected class SearchTableSource:UITableViewSource
 2         {
 3             public SearchTableSource(DiagramsViewController controller) 
 4             {    }
 5 
 6             public override int RowsInSection (UITableView tableview, int section)
 7             {
 8                 if (filteredProjects != null) {
 9                     return filteredProjects.Length;
10                 }
11                 return 0;
12             }
13 
14             public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
15             {
16                 return ...;
17             }
18 
19             public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
20             {
21                 ...
22             }
23 
24         }
IOS MONO UITableViewConntroler Add UISearchBar

 

 

 

 

最终达到想要:

IOS MONO UITableViewConntroler Add UISearchBar

 

当中还做了些比较细的修改取决你你的项目需求,这边就不多写了~

 

IOS MONO UITableViewConntroler Add UISearchBar,布布扣,bubuko.com

IOS MONO UITableViewConntroler Add UISearchBar

上一篇:Android:UI界面设计基础知识总结(二)


下一篇:采用contentprivider扫描手机SD卡的图片资源