IOS MONO UITableViewConntroler Add UISearchBar

时间:2014-05-26 22:23:30   收藏:0   阅读:474

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

bubuko.com,布布扣

当中动用到的几个类:

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

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

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

UISearchBar (搜索框

UISearchDisplayController(搜索框的显示控制器

 

TableViewController要实现两个接口 IUISearchBarDelegate,IUISearchDisplayDelegate

bubuko.com,布布扣
public class DiagramsViewController:UITableViewController,IUISearchBarDelegate,IUISearchDisplayDelegate
bubuko.com,布布扣

 

UITableViewController中声明好变量

 

bubuko.com,布布扣
1 private UISearchBar searchBar;
2 private UISearchDisplayController searchDisplayController;
bubuko.com,布布扣

 

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

 

 

bubuko.com,布布扣
 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 }
bubuko.com,布布扣

 

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

bubuko.com,布布扣

 

 

 

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

 

bubuko.com,布布扣
 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         }
bubuko.com,布布扣

 

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

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

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

 

bubuko.com,布布扣
 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         }
bubuko.com,布布扣

 

 

 

 

最终达到想要:

bubuko.com,布布扣

 

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

 

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

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!