IOS MONO UITableViewConntroler Add UISearchBar

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

当中动用到的几个类:

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

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

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

UISearchBar
(搜索框)

UISearchDisplayController(搜索框的显示控制器)

TableViewController要实现两个接口 IUISearchBarDelegate,IUISearchDisplayDelegate


public class DiagramsViewController:UITableViewController,IUISearchBarDelegate,IUISearchDisplayDelegate

在UITableViewController中声明好变量


1 private UISearchBar searchBar;
2 private UISearchDisplayController searchDisplayController;

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


 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 }

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

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


 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 }

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

我是对搜索使用自己实现新的

SearchTableSource,而不是原来的
UITableViewSource。

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


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

时间: 2024-12-10 01:29:20

IOS MONO UITableViewConntroler Add UISearchBar的相关文章

iOS.UIKit.14.UITableView -- UISearchBar

1.案例介绍:一个具备搜索功能的表视图,如图01,02,03 图01图02图03 2.Main.storyboard,如图04 图04 3..h #import <UIKit/UIKit.h> @interface CQ23ViewController : UITableViewController<UISearchBarDelegate, UISearchDisplayDelegate> // 搜索栏 @property (weak, nonatomic) IBOutlet UI

IOS中搜索框UISearchBar及搜索方法的使用

搜索框可以用UISearchBar,并且可以设置代理UISearchBarDelegate. 1 -(void)addSearchBar{ 2 CGRect searchBarRect = CGRectMake(0, 0, self.view.frame.size.width, 44); 3 UISearchBar *searchBar = [[UISearchBar alloc]initWithFrame:searchBarRect]; 4 searchBar.placeholder = @"

IOS MONO Debugger

MONO DeBugger Mac上支持 1:USB连线调试,WIFI调试 2:Debug 可以调试进去封装好的类库 (要在Debugger中开启类库调试)(Debug project code only;do not step into framework code.) 生成调试版本比发布版本更加久 Monotouch Profiler 首先你MONO得是商业版本的. TestFlight支持

iOS 搜索框之UISearchBar

一.初始化:UISearchBar继承于UIView,我们可以像创建View那样创建searchBar UISearchBar * bar = [[UISearchBar alloc]initWithFrame:CGRectMake(20, 100, 250, 40)]; [self.view addSubview:bar]; 二.属性 @property(nonatomic)        UIBarStyle              barStyle; 这个属性可以设置searchBar的

IOS MONO Rivets 应用 跳转 导航

Rivets是MONO上开源的一个DLL.跨平台上实现应用与应用间的跳转. 于传统应用跳转不同,传统跳转需要连接先跳转到WEB上然后才跳转到应用中,这是一个用户体验极差的操作. 范例中异步调用Example Store 应用,通过特色URL,轻松打开想要的应用,打开的应用对接收到URL进行处理. 1 new StyledStringElement("App Link to widget with Referer", async () => { 2 var url = "

iOS用UITextField自定义UISearchBar遇到的布局问题

以下问题都是在设定了leftView的情况下发生 2.设置按钮为leftView并通过contentinset限制了图片显示高度达到图片显示的居中效果,结果按钮大小被调整,左右间隔被取消 修改方案:contentinset设置时,按照需求top.left.right.bottom一起设置,否者只设置上下间距,左右间距会根据实际所需取消掉多余空白 1. leftView上面加了个imageView,imageView使用了自动布局,导致可输入字符范围大幅缩小不可见 修改方案:leftView和它的

iOS开发总结之UITextField常用属性和方法

UITextField属性 0.        enablesReturnKeyAutomatically 默认为No,如果设置为Yes,文本框中没有输入任何字符的话,右下角的返回按钮是disabled的. 1.borderStyle 设置边框样式,只有设置了才会显示边框样式 text.borderStyle =UITextBorderStyleRoundedRect; typedef enum { UITextBorderStyleNone, UITextBorderStyleLine, UI

新浪微博客户端(5)-自定义UISearchBar

iOS自带的UISearchBar有很多限制,我们可以使用UITextField做出一个类似于SearchBar的效果. //================================================= // 自定义SearchBar //================================================= // 1.创建一个UITextField作为背景 UITextField *searchBar = [[UITextField alloc

ios开发环境配置及cordova安装与常用命令

一.ios开发环境配置 1.首先要有台Mac Book,如果有Mac Book,跳过步骤2.3.4,如果没有,执行步骤2.3.4: 2.下载并安装VMware Workstation,最好是下最新版本: 3.下载并安装unlock-all(VMware Workstation默认限制安装Mac虚拟机,需要安装此文件后解除限制); 4.下载Mac OS操作系统的镜像文件(需要是.ios文件)如果下载的是.dmg文件,需要用 anytoiso.exe工具转换成.ios文件,下载完成后在VMware