swift实现 iphone swift设置界面怎么实现的

62790人阅读
& & & & 由于最近才接触到IOS,苹果已经建议storyboard来搭建所有界面了,于是我也追随时尚,直接开始使用storyboard。(不料在涉及到页面跳转的时候,遇到的问题是:点击后没有任何反应)众所周知,在storyboard中,界面的跳转是通过segue来实现的,利用它,省去了方法内写入跳转的代码。
一 视图跳转
《StoryBoard下的视图跳转》
我们知道:segue共有三种类型:push,modal,和custom。如下图://01
简单说下这三个的作用:使用导航栏压进新的控制器(push),模态的加载视图控制器(modal),自定义(custom)。
好了,废话少说,现在开始我们的旅行。
1,首先建立一个Single View 模板的项目,记得勾选上storyboard。然后打开它,在rootViewController(也就是我们的主视图)添加一些label和一个button。
2,在右边的库中拖入一个ViewController,也添加一个Label。具体如下图所示://02
3,选中button,右键(或control+鼠标左键)拖拽到第二个ViewController中,选择:Modal,然后记得save。这个时候,运行模拟器,点击button,你会发现成功跳转到了第二个界面。我们没有在代码区做任何操作,甚至连button和第二个ViewController都没有创建,确实就是这么的简单。//03
好了,到了这里,简单说一下storyboard下,利用segue界面跳转一共有两种方式:
第一种就是以上我的例子,利用button组件,拖拽添加segue,直接运行就可以用。
第二种是利用ViewController与ViewController之间,拖拽添加segue。不过,这种方法就需要在相应需要跳转的方法内写入代码,手动去设置它的跳转。
4,把刚才例子设置button的segue删除(右键,点X),一切恢复了最初时的状态,我们给buttom添加一个点击的方法,然后在ViewController.m中实现此方法,在方法体内写入这样的代码://04
5,注意看方法参数:@&second&,这个second是我自命名的一个标示符,一会你就会遇到。
6,save保存,打开storyboard,选中rootViewController,右键拖拽到第二个ViewController,在弹出的界面同样选择:modal。//05
7,打开这个segue的设置页面:设置其identifier为second,就是我在代码中的那个自命名参数。
8,save保存,运行模拟器,你会惊奇的发现,实现了同样的跳转。
到现在为止,我们一共用两种简单的方式实现了视图的跳转:1是设置button的segue,2是设置viewcontroller与viewcontroller之间的segue,只是后者需要在代码中手动管理跳转。
看似很简单的事情,却让我耽误一些时间,主要是因为我在网上看的好多例子都是以UINavigationController为rootviewController(这样省事省时,跳转后还可以利用系统为我们创建的返回按钮返回到rootViewController),然后用button拖拽到第二个视图时选择的push,由于当时不理解push相关的类型含义,所以在写的时候,我总是选择push,造就了点击后无法跳转。现在终于明朗了,记录下来,供不明白的同学学习。
----------------------------------------------------------------------------------------------------
&//根据&segue Identifier跳转界面
& & [self&performSegueWithIdentifier:@&GotoTwo&&sender:self];
& &//以modal&方式跳转
& & [self&presentModalViewController:nil&animated:YES];
& &//压进一个viewcontroller
& & [self.navigationController&pushViewController:nil&animated:YES];
& &//弹出一个viewcontroller&&相当与返回上一个界面
& & [self.navigationController&popViewControllerAnimated:YES];
& &//&以&modal跳转的返回方法
& & [self&dismissModalViewControllerAnimated:YES];
-----------------------------------------------------------------------------------------------------
再写一下关于segue三个类型的详解:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在storyboard中,segue有几种不同的类型,在iphone和ipad的开发中,segue的类型是不同的。
在iphone中,segue有:push,modal,和custom三种不同的类型,这些类型的区别在与新页面出现的方式。
而在ipad中,有push,modal,popover,replace和custom五种不同的类型。
最常用的场景,新的场景完全盖住了旧的那个。用户无法再与上一个场景交互,除非他们先关闭这个场景。
是在viewController中的标准切换的方式,包括淡出什么的,可以选切换动画。
Modalview:就是会弹出一个view,你只能在该view上操作,而不能切换到其他view,除非你关闭了modalview.
Modal View对应的segue type就是modal segue。
*Modal:Transition to another scene for the purposes of completing a task.当user在弹出的modalview里操作完后,就应该dismiss the modal view scene然后切换回the originalview.
Push类型一般是需要头一个界面是个Navigation Controller的。
是在navigation View Controller中下一级时使用的那种从右侧划入的方式
*Push:Create a chain of scenes where the user can move forward or back.该segue type是和navigation viewcontrollers一起使用。
popover(iPad only)
popover 类型,就是采用浮动窗的形式把新页面展示出来
*Popover(iPad only):Displays the scene in a pop-up “window” over top of the current view.
Replace (iPad only):
替换当前scene,
Replace the current scene with another. This is used in some specialized iPad viewcontrollers (e.g. split-view controller).
就是自定义跳转方式啦。
*Custom:Used for programming a customtransition between scenes.
在Storyboard中使用自定义的segue类型
参考/?p=72
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
《Xib下的视图跳转》
现在说一下,没有使用Storyboard,直接创建xib时的页面跳转,其实也很简单,只要理解了,都不是问题。我也是从java刚转过来,起初感觉很不适应,但是现在发现interface builder真的是太强大了。
1,创建一个项目,我用的是Empty Application模版,这种模版创建出来的项目只包含一个Appdelegate.h和Appdelegate.m文件,rootviewController需要我们自行创建。(注意:最新的版本,apple把MainWindow.xib文件取消了,所以无法打开xib查看包含的图标)此时运行模拟器只会显示空白的界面。好了,File-newFile 创建一个Object-C
class,打开后,subclass of 选择默认的UIViewController,注意,需要勾选上With XIB for user interface,不然一会无法创建主视图。
2,创建好后,打开其xib文件,简单添加一些button组件。此时保存运行程序还是无法显示我们创建的RootViewController。【有时如果你在项目清单下的user interface 选择此MainViewController运行后台还会报:Applications
are expected to have a root view controller at the end of application launch的错误,原因都是项目的Delegate无法发现一个rootViewContrller】所以这就需要我们手动在AppDelegate中让它们关联起来。
AppDelegate.h
AppDelegate.m
[self.viewController就是我们在.h文件中声明的]
3,好了,保存后,这个时候运行就能显示我们的界面了~同样也很简单吧!好了,我们现在参照以上的方法,再创建一个SecondViewController(记得勾选xib),然后我们给rootviewcontroller视图的 button添加一个事件方法,可以让它点击后跳转到SecondViewController。
(首先创建了一个SecondViewController并实例化,intitWithNibName的参数一定要正确写控制器配对的xib文件的名称,调用presentModalViewController:controller 就可以跳转啦。)
发现了把,其实都挺简单的,本来可以创建single View Application模板的,这样就省去创建rootViewController和在Delegate中写那些代码了,我这样也就是让大家感受一下,xib,delagate,stroyboard之间的区别和联系,都尝试一下,你们就会明白他们之间的机制,至少可以会写界面和跳转的方法啦。哈哈,有什么问题大家一起交流,我也是初学者,可以给我留言噢。~~~
二 页面传值
方法一使用segue传递数据,继续上面的项目例子。
1,在rootViewController声明一个UITextField并与storyboard关联上。File-add添加一个SecondViewController(继承UIViewController),然后在keyboard第二个viewcontroller的属性设置其class关联。同样在SecondViewController声明一个UITextField并关联。如图所示://06
2,然后在rootViewController.m的文件中覆盖名称为:prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender的方法,并写入如下语句,如图://07
3,我们获取了主视图的文本框内容,并通过segue的方法发送了出去,接下来要做的就是在secondViewController声明一个@property NSString * 类型,名称为data的字符串,然后在其.m文件中的-(void) viewDidLoad方法中写入如下代码://08
注意:发送数据时,[send setValue:msg forKey:@&data&]; 这个&data&名称一定要与跳转后界面的声明的类型对象的命名一致,不然的话,跳转后的界面是收不到传递的值的。
方法二,使用notification广播实现视图跳转传递数据,继续上面的项目展开。
广播机制分为:注册----发送------------接收(接收方),具体请看一下代码。
1,在要发送数据的视图页面.m文件处理发送逻辑的方法里注册+发送
- (IBAction)pressed:(id)sender {
[self performSegueWithIdentifier:@&second& sender:self];
NSLog(@&send message:%@&,firstField.text);
//页面跳转传值方法二:利用notification
NSDictionary *dicts = [NSDictionary dictionaryWithObjectsAndKeys:@&one1&,@&one&,@&two2&,@&two&,@&three3&,@&three&, nil];
//注册(第一步)
NSNotification *notification
=[NSNotification notificationWithName:@&mynotification& object:firstField.text];
//发送(第二步)
[[NSNotificationCenter defaultCenter] postNotification:notification];
//注册+发送也可以一行完成(等效于以上两行)
[[NSNotificationCenter defaultCenter] postNotificationName:@&mynotification2& object:dicts];//发送一个字典过去
}notificationWithName:参数的值是自己定义,接收方以此名称为接收标识。
2,在跳转后,接收数据视图页面.m文件中处理逻辑的方法里 接收
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
//接受端:接受(第一步)
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationHandler:) name:@&mynotification& object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationHandler2:) name:@&mynotification2& object:nil];
//自定义接收信息和处理的方法(第二步)
-(void) notificationHandler:(NSNotification *) notification{
secondField.text = [notification object];//收到消息后在UItextField中显示出来
//自定义接收字典信息的方法
-(void) notificationHandler2:(NSNotification *) notification2{
NSDictionary *dict = [notification2 object];
NSLog(@&receive dict :%@,forkey:%@&,dict,[dict objectForKey:@&one&]);
注意:如果注册的notification在目标视图没有收到或名称写错,目标视图的相关方法就不会执行
国外参考论坛【传送门】
方法三,通过Delegate委托传递数据
此方法我测试完后,感觉不是太好用,有一些局限性,相当于自定义读取方法:无非是在A对象里保存了一个B对象的指针,然后在A的某个函数里去设置B对象某个属性的值。
具体看教程把。
1,首先add a File-- &Objective-C protocol,然后声明一个传递数值的方法:
//&1&自定义一个用来传递数值的delegate
@protocol ViewPassValueDelegate &NSObject&
-(void) passValue :( NSString *)
2,然后在要发送数据的视图的.h文件下声明一个自定义的delegate
#import &UIKit/UIKit.h&
#import &ViewPassValueDelegate.h&
@interface ViewController : UIViewController{
NSObject&ViewPassValueDelegate& *
- (IBAction)pressed:(id)//主视图button点击出发的Action
@property (retain, nonatomic) IBOutlet UITextField *firstF
3,在要发送数据的视图的事件处理方法里声明一个secondViewController实例,然后赋值给 delegate,同时执行协议的 passValue方法
- (IBAction)pressed:(id)sender {
secondViewController *secondController = [[secondViewController alloc] init];//实例化一个视图2的对象
[delegte passValue:firstField.text];
4,然后在接收数据视图(secondViewController).h文件实现自定义协议
//&2& 视图1实现自定义协议
@interface secondViewController : UIViewController&ViewPassValueDelegate&
5,在接收数据视图(secondViewController).m文件中实现协议中的passValue方法:
//&3&实现自定义delege的方法
-(void) passValue:(NSString *)value{
secondField.text=
NSLog(@&passValue method get Value : %@ secondField.text:%@&,value,secondField.text);
至此,大功告成,打印输出会显示你在第一个界面发送的数据,但是我把此数据赋值于页面的UITextField对象,但是此对象得到的值总是null,无法在界面展示出来,我也很苦恼,什么方法都尝试完了,发现此接收方法总是会在ViewDidLoad方法之后执行,并且方法体内设置UITextField任意值都无法成功。
目前总结是,以上value只是对视图1对象赋值时的一个指针引用,出了方法范围,就无效了。所以在方法体内打印都是有数据的,出了方法体,就没有持有的引用了。
具体原因有待考察。
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1222922次
积分:9877
积分:9877
排名:第739名
原创:95篇
转载:24篇
评论:405条
(1)(1)(1)(3)(2)(11)(6)(1)(7)(1)(1)(3)(2)(1)(10)(4)(6)(9)(4)(11)(1)(5)(4)(1)(3)(2)(9)(5)(1)(6)如何使用Swift添加Table View搜索框_百度知道
如何使用Swift添加Table View搜索框
提问者采纳
在Xcode中,选择 File\New\Project… 创建一个新项目。选择 Single View Application 点 Next 。将项目命名为 CandySearch 确保 Language 设置为 Swift 并且 Devices 设置为 iPhone 。点击完成,选择你想储存的位置,然后点击 Create 。首先将默认的文件清理掉,这样你就可以真正的从头开始。在 Project Navigator 中,选择 ViewController.swift ,右键点击,选择删除,然后选择 Move to Trash 。然后打开 Main.storyboard ,选择唯一的一个view controller然后删掉他。现在你有一个空的storyboard,可以在你的应用中添加主屏幕了。从 Object Browser (边框控制条的右下部分)拖出 Navigation Controller 以将iOS内置的导航逻辑添加到项目中。这样可以在storyboard中创建两个view controllers – navigation controller和table view controller,这些将作为应用的初始视图。当用户选择列表中的某一项时,你需要一个视图控件来显示详细的内容。从Table View Controller中拖拽,一直到那个新的view controller释放,并且在弹出的菜单中选择 show 来作为manual segue的选项。设置糖果类下一步你将创建一个用来显示糖果的数据结构,保存像策略和名称类的信息。在 CandySearch 文件夹上点击右键,然后选择 New File… 。选择 iOS \ Source \ Swift File 然后点击下一步。将此文件命名为 Candy.swift 。打开文件,然后添加如下内容:struct Candy {
let category : String
let name : String}这个结构有两个属性:糖果的策略和名称。当你的用户在应用中搜索糖果时,会引用名称属性对用户搜索的字符串进行比较。你文章稍后将会发现策略字符串在你实现分类条时有多么重要。你不需要在这里添加自己的初始化,你能得到一个自动生成的机制。默认的,初始化参数将对属性进行配置。在下一个部分中你将看到如何创建 candy 实例。现在你已经准备好设置 UITableView 以使你的 UISearchBar 能够过滤信息!连接Table View下一步你将设置 UITableView 让他和 UISearchBar 一起工作。右键点击 CandySearch 文件夹并且选择 New File… 。选择 iOS \ Source \ Cocoa Touch Class 点击下一步。类命名为 CandyTableViewController ,父类设置为 UITableViewController 并且设置语言为 Swift 。开始的时候我们需要添加一个数组。打开 CandyTableViewController.swift 并且增加如下代码:var candies = [Candy]()candies 数组将会管理所有不同的 Candy 对象,以便用户搜索。说到这里,是时候创建你的糖果了!在这篇引导中,你只需要创建一个数量区间,用来说明搜索条如何工作;在制作应用的过程中,你会发现你有成千上万的条目需要检索。但是不论你的应用程序有多少条目,搜索的方法都是相同的。具有可伸缩性是最好的!为了能够布置好你的 candies 数组,重写 viewDidLoad 如下:override func viewDidLoad() {
super.viewDidLoad()// 向candyArray中添加简单的数据
self.candies = [Candy(category:&Chocolate&, name:&chocolate Bar&),
Candy(category:&Chocolate&, name:&chocolate Chip&),
Candy(category:&Chocolate&, name:&dark chocolate&),
Candy(category:&Hard&, name:&lollipop&),
Candy(category:&Hard&, name:&candy cane&),
Candy(category:&Hard&, name:&jaw breaker&),
Candy(category:&Other&, name:&caramel&),
Candy(category:&Other&, name:&sour chew&),
Candy(category:&Other&, name:&gummi bear&)]// 刷新table
self.tableView.reloadData()}这段代码并没做太多的设置,但他做了一些重要设置。首先它填充了9个有不同名称和类别的糖果。你将在填充数组后使用它。然后你让tableView重新载入数据。你必须这么做,以确保所有的糖果信息都被显示。下一步,你将添加控制表视图本身的功能。实现 tableView(_:numberOfRowsInSection:) 如下:override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -& Int {
return self.candies.count}这里简单的告诉 tableView ,应该包含许多行,而这个数量是你在 candies 数组中确定的。现在 tableView 知道了需要准备多少行,你需要告诉他每行需要放什么内容。实现tableView(_:cellForRowAtIndexPath:):override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -& UITableViewCell {
// 在tableview中查询一个条目,如果没有创建一个。
let cell = self.tableView.dequeueReusableCellWithIdentifier(&Cell&, forIndexPath: indexPath) as UITableViewCell// 从我们的糖果数组中获得相应的内容
let candy = self.candies[indexPath.row]// 设置条目
cell.textLabel!.text = candy.name
cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicatorreturn cell}这个方法主要分三个部分。首先,你使用 indexPath 选出条目。然后检索 candies数组,根据 indexPath 决定哪个 Candy 需要提取,然后使用 Candy 对象实现 UITableViewCell 实例。注意 :如果你在之前已经使用过Table Views,你也许会怀疑为什么没有实现 heightForRowAtIndexPath 。在iOS8中,这个方法已经不再支持;操作系统在运行时自动决定元素的大小。这岂不是更好吗?:]当然,如果你打算让你的应用支持早期iOS版本,你还是需要实现这个方法。现在你做的差不多了!还需要一个步骤你就可以看到糖果列表了。你需要实现故事板中的所有代码。首先,打开 Main.storyboard 并且选择 Root View Controller 。在Identity Inspector 中(右边栏中顶部第三个选项卡),设置 Class 为 CandyTableViewController 。这将会告诉操作系统当你的控件呈现在屏幕时加载你指定的关联类。好了,现在,双击 CandySearch 根视图控件的标题,然后修改他,这可以给你的用户一些关于他们能在软件中做什么的提示。最后,你需要让你的操作系统知道你的代码是用于做什么的。你需要注意当你修改故事板的之前,一个默认的元素已经存在于你的table view中。选择这个元素(通常被命名为”Cell”)并且打开Attributes Inspector(位置在Identity Inspector的右边)。修改 Identifier 为 Cell 。这将重新匹配你早期代码中元素的标示符。保存你的修改并运行。现在你有了一个正在工作的列表视图!许多的糖果。。。呈现这些只花了极短的时间!接下来我们需要一个UISearchBar!设置UISearchBar如果你查看过 UISearchBar 的文档,你将发现作者非常的懒惰。作者没有提供任何具体的搜索接口!这个类只是提供了一些用户所期望的接口。他更像是一个中级的管理类;擅长将任务委托给他人。UISearchBar 这个类使用一个代理接口进行通讯,使你的应用知道用户做了些什么。所有的字符串匹配和其他的操作都需要你自己编写完成。尽管这个看起来有点可怕(有点不公平!),但写自定义的搜索方法给了你的应用完善的控制返回结果的体验。你的用户将会欣赏你提供的搜索结果 – 并且也会更快速。打开 Main.storyboard 并且拖放一个 Search Bar and Search Display Controller 对象到视图控制器。注意 – 这里和 Search Bar 对象有一些不同,他也是有效的。调整搜索条的位置。不能明白搜索显示控制器的意思?根据苹果自己的文档,一个搜索显示控制器是“管理搜索条的显示,具体来说是一个显示另一个视图控制器搜索结果的table view”。这意味着区别于你刚才设置的, 搜索控件将有他自己的table view用来显示结果。简单的来说,先在显示控件中增加上层操控,然后把一个搜索中生成的过滤数据放入一个单独的视图控制器,这一点你丝毫不用自己操心。:]UISearchBar中Attributes inspector的选项在故事板中,花些时间重新查看搜索条对象的可用属性。你也许不会全部使用到,但使用一个新的UIKit组件之前了解 Attributes Inspector 是值得的。Text :这将改变呈现在搜索条上的字符串。如果你的应用需要使用默认值,你是不需要修改这一属性的。Placeholder : 这正是你所期望的 – 他允许你放置一个浅灰色的文本以高速你的用户搜索条可以做什么。在这个糖果应用中,我们使用 “搜索你的糖果”。Prompt : 这个文本将会直接显示在搜索条的上方。这有利于对复杂的搜索机制进行说明。(但在这个应用中,Placeholder应该更显而易懂!)Search Style, Bar Style, Translucent, Tint, Background and Scope Bar Images : 这些选项允许你自定义搜索条的呈现。这些选项是为了是你的UISearchBar和UINavigationBar看起来更和谐。Search Text and Background Positions : 这些选项允许你添加文本与搜索框的偏移量。Show Search Results Button : 在搜索条的右边提供一个按钮为了执行像显示最近搜索或者显示最后搜索的方法。搜索栏与这个按钮的交互是通过代理方法来实现的。Show Bookmarks Button : 在搜索栏右边显示标准的蓝色椭圆形书签。这将有一个用户希望保存的搜索书签。像结果按钮一样,也是通过代理来实现的。Show Cancel Button : 这个按钮允许用户关闭搜索栏单独生成的视图控制器。如果这个选项没有选中,搜索栏会在隐藏取消按钮并在搜索模式中自动显示。Shows Scope Bar & Scope Titles : 分类条允许用户用特定的策略进行搜索。比如在音乐应用中,这个控件条也许会显示艺术家,专辑或者流派。对于当前项目,保持这个选项没有被选中;你将实现自己的分类标签。Capitalize, Correction, Keyboard, etc. : 这些选项都借用了UITextField的内容,可以让你改变搜索条的行为。例如,如果用户想搜索专业名词或者是人名,这是就可以关闭自动修正,以避免不必要的麻烦。在本教程中,糖果的名字都是普通的名称,所以保持默认选项就可以了。注意 :了解一些有用的选项可以为你的开发节省许多时间。所以对于一个iOS未来的开发者,是要经常花时间搜索可用的资源。UISearchBarDelegate和过滤器设置了故事板以后,你需要写一些代码来让搜索条工作。设置 CandyTableViewController 类响应搜索条,这需要实现一些接口。打开 CandyTableViewController.swift 并且将类的声明替换为下列代码:class CandyTableViewController : UITableViewController, UISearchBarDelegate, UISearchDisplayDelegate {UISearchBarDelegate 定义了搜索的行为和响应方式,然后 UISearchDisplayDelegate 定义了搜索条的外观。下一步,在类中添加如下属性:var filteredCandies = [Candy]()这个数组将保存过滤后的数据。下一步,添加如下辅助方法到类里面:func filterContentForSearchText(searchText: String) {
// 使用过滤方法过滤数组
self.filteredCandies = self.candies.filter({( candy: Candy) -& Bool in
let categoryMatch = (scope == &All&) || (candy.category == scope)
let stringMatch = candy.name.rangeOfString(searchText)
return categoryMatch && (stringMatch != nil)
})}这个方法将使用 searchText (也就是你的搜索字符串) 过滤 candies ,然后将结果放入 filteredCandies 。Swift的数组有一个叫做filter()的方法,他使用了一个闭合表达式作为他唯一的参数。如果你有一些Objective-C的经验,仔细看一下闭合表达式在Swift中的表现形式。闭包是一个自包含的功能块。他们被称作闭包,是因为他们可以使用一段上下文捕获或储存任意变量或常量的引用,这被称为关闭。下面是一个闭合表达式的语法:{(parameters) -& (return type) in expression statements}在这个示例中,过滤方法使用闭合表达式来区分数组中的每一个元素。闭包表达式的参数用于对个别的元素进行排序。闭包表达式返回一个bool值,如果元素存在于过滤的数组中则返回true,如果返回false则说明没有包含在数组内。如果你仔细查看文档中的方法,你会注意到他使用了一个像 的类型。这是一个通用类型,这以为这他可以是任何类型。直到你使用闭包表达式定义自己的过滤规则,这个过滤方法可以使用在任何类型的过滤上。闭包表达式的参数也是一个 T 类型,其中的元素就是等待被过滤的。在你的代码中我们使用了 candy : Candy ,然后你了解了这个数组是被 Candy装满的:rangeOfString() 用于检查是否字符串包含索要查找的字符串。如果是,则返回true,表明当前的糖果包含在过滤的数组中;如果返回false则不包含。下一步,在类中添加如下代码:func searchDisplayController(controller: UISearchDisplayController!, shouldReloadTableForSearchString searchString: String!) -& Bool {
self.filterContentForSearchText(searchString)
return true}func searchDisplayController(controller: UISearchDisplayController!, shouldReloadTableForSearchScope searchOption: Int) -& Bool {
self.filterContentForSearchText(self.searchDisplayController!.searchBar.text)
return true}
资深电脑人
其他类似问题
为您推荐:
swift的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 iphone6设置界面 的文章

 

随机推荐