在目标C中如何使用带有表视图的搜索栏功能?

大家好,在这个博客中,我们将学习ios中搜索栏功能的基础知识。

我们知道,如果应用程序中存在大量数据,那么搜索功能将为我们提供灵活的功能,使您可以轻松地在应用程序中轻松找到某些内容。

现在让我们直接进入应用程序。

我们需要的东西

我们需要一些东西-包含XCode的MacBook或Mac,执行少量编码的动力。

初始设置

进入Xcode并进入“创建新应用程序”部分,然后如前所述进入其中的单视图应用程序。

现在,在完成此步骤之后,就像在下面的快照中那样为您的应用程序命名,您可以选择一个名称。

接口设计

现在,我们将设计应用程序的接口,其中将包含以下提到的内容:

  1. 可以用于显示数据的表格视图以列表的形式包含。
  2. 搜索栏将用于根据名称搜索对象。
  3. 一个将一些对象添加到我们的列表中以进一步扩展它的UIButton。

步骤1

将UIButton添加到您的主视图中,以便将来我们可以向其添加更多对象,如下所述。 请记住,这是您是否要执行的选择。 另外,给它一个名为addObjectButton的对视图控制器的引用。

第2步

现在,在我们之前在应用程序中添加的按钮下方添加一个表View。

借助此表格视图,我们可以使用表格视图格式显示包含应用程序的数据。

步骤3

现在,在其中首先从XCode右侧的工具栏中添加搜索栏。

将其放入表视图中,以便可以使用其委托方法轻松地从表视图中获取和搜索数据。

现在,我们可以在应用程序中使用iOS中的搜索功能。

现在,我们可以添加编码部分,使用搜索栏委托从我们的应用程序中可用的数据列表中查找并显示相关结果。

步骤4

现在我们需要在应用程序中添加一个UITableViewCell类,因为将来我们将在自定义表格视图单元格中使用它。

为此,只需转到文件->新文件->可可触摸类-> UITableViewCell类,然后根据您的名称进行命名。

此过程完成后,将此文件分配给您先前创建的自定义表格视图单元格类。

步骤5

此时,我们现在可以将编码功能添加到我们的应用程序中,并将其添加到应用程序的viewcontroller.h文件中。

如下所示,将以下代码添加到文件中。

  #import  
@interface ViewController:UIViewController
@属性(强,非原子)IBOutlet UISearchBar * searchBar;
-(IBAction)addObjectButton:(UIButton *)sender;
@属性(强,非原子)IBOutlet UITableView * tableView;
@结束

在这里,我们向其中添加了表视图委托和数据源对象,还添加了用于调用搜索栏的委托。

我创建了一个搜索栏对象UISearchBar,然后将其附加到界面设计工具中表视图内添加的搜索栏对象中。

一个早已创建的Button以及一个表视图Outlet,以便我们可以将其分配给我们的自定义表视图对象。

步骤6

现在,我们将在viewcontroller.m文件中创建两个可变数组,以便随后进行。

我们可以使用一个对象在数组中添加表视图对象。 另一种是添加使用搜索栏搜索特定对象后可以显示的对象。

  #import“ ViewController.h” 
#import“ SearchTableViewCell.h”
@interface ViewController(){
NSMutableArray *设备;
NSMutableArray * filteredDevices;
}

步骤7

我们将要使用的另一件事是一个布尔对象,该对象将告诉我们是否搜索了过滤后的数据,因此,请如下所述将其添加到您的代码中。

  #import“ ViewController.h” 
#import“ SearchTableViewCell.h”
@interface ViewController(){
NSMutableArray *设备;
NSMutableArray * filteredDevices;
BOOL isFiltered;
}

代表和数据来源方法

现在,我们可以在视图控制器.m文件中添加处理表视图数据和方法的功能。

步骤1

在您的viewdidload方法中,添加将用于将对象添加到我们的数组中的代码。

也将初始化搜索栏委托。

  -(void)viewDidLoad { 
[super viewDidLoad];
isFiltered = false;
self.searchBar.delegate =自我;
devices = [[NSMutableArray alloc] init];
[devices addObject:@“ iPhone”];
}

在此数组内添加更多对象,例如iPhone,iPad,iPod,iMac,iStore,iOS,iTunes等。之后,我们可以使用iOS的搜索功能来过滤特定对象。

第2步

在自定义单元格的帮助下,添加用于将数据调用到表视图中的方法,所需的方法是cellForRowAtIndexPath:

告诉表视图的方法,表视图中需要多少行,可以使用numberOfRowsInSection:方法完成。

  -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
如果(已过滤){
返回filteredDevices.count;
}
返回devices.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
SearchTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@“ Cell” forIndexPath:indexPath];
如果(已过滤){
cell.mainLabel.text = filteredDevices [indexPath.row];
}
其他{
//配置单元...
cell.mainLabel.text = devices [indexPath.row];
}
返回单元
}

如您所见,我正在使用isFiltered到我的代码中的bool函数。 当然,这将告诉您搜索是否已经完成。

步骤3

现在,我们要做的就是添加代码,该代码将根据用户点击的查询来搜索对象。

我们可以使用搜索栏提供的textDidChange:方法来做到这一点。

  -(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { 
如果(searchText.length == 0){
isFiltered = false;
[self.searchBar endEditing:YES];
}
其他{
isFiltered = true;
filteredDevices = [[[NSMutableArray alloc] init];
用于(NSString *设备中的设备){
NSRange range = [设备rangeOfString:searchText选项:NSCaseInsensitiveSearch];
如果(range.location!= NSNotFound){
[filteredDevices addObject:device];
}
}
}
[self.tableView reloadData];
}

在此代码中,您可以看到我正在使用NSRange对象,该对象将基于rangeOfString对象搜索文本。

步骤4

我们忘记添加的另一件事是numberOfSection:方法。

最后,这将表明我们的应用程序的表格视图中有多少节。

  -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
返回1;
}

在这里,将显示一个部分,我们可以根据需要添加多个部分。

现在我们的应用程序已完成,您可以运行并检查搜索栏功能的功能。

嘿,我们还没有完成,请稍等一下,看看下面的代码。

奖金部分

是的,我们正在向应用程序添加另一个功能,即使用自定义警报框将对象添加到我们的表视图中。

步骤1

现在,如果您还记得我们之前在应用程序中添加了一个按钮,并且在该按钮的帮助下,我们将添加一个自定义警报消息,该消息将包含一个文本字段以在表视图中添加更多元素:

  • 创建一个警报控制器对象,通过它可以在警报中显示标题和文本。
  • 将文本字段添加到警报控制器,以便以后可以使它在阵列内添加对象。
  • 将警报操作添加到将向我们提供的自定义警报框中,该功能是在将对象添加到其中之后执行某些操作的功能。
  -(IBAction)addObjectButton:(UIButton *)sender { 
UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@“添加元素”
消息:@“输入数据”
preferredStyle:UIAlertControllerStyleAlert];
[alertController addTextFieldWithConfigurationHandler:^(UITextField * textField){
textField.placeholder = @“名称”;
textField.textColor = [UIColor blueColor];
textField.clearButtonMode = UITextFieldViewModeWhileEditing;
textField.borderStyle = UITextBorderStyleRoundedRect;
}];
UIAlertAction * ok = [UIAlertAction actionWithTitle:@“ OK”样式:UIAlertActionStyleDefault
处理程序:^(UIAlertAction *操作){
//在这里做一些动作
UITextField * textField = alertController.textFields [0];
[devices addObject:textField.text];
[self.tableView reloadData];
}];
UIAlertAction * cancel = [UIAlertAction actionWithTitle:@“取消”样式:UIAlertActionStyleDefault
处理程序:^(UIAlertAction *操作){
[alertController dismissViewControllerAnimated:YES完成:无];
}];
[alertController addAction:ok];
[alertController addAction:cancel];

[自身presentViewController:alertController动画:是完成:无];
}

现在,它将执行所有功能,以将新对象添加到数组中。 在用户完成添加后,它将显示在我们的表格视图中,然后按确定按钮。

想删除一个对象

如果您想通过简单地向左滑动对象来删除对象,就像iPhone联系人中提供的iOS功能一样,该怎么办。 你在想对。

同时,我们有时会将该功能添加到该项目中,因为有时会发生错误地添加对象的情况,

后来想删除它,但由于缺乏编码或知识而无法删除它。

因此,让我们以尽可能快速,最简单的方式添加它。

首先,添加此

  -(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { 
返回是;
}

使用此方法,我们可以启用滑动删除iOS功能到表视图对象。

现在,在初始化功能之后,我们可以添加代码以从特定位置的数组中删除对象。

  -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
如果(editingStyle == UITableViewCellEditingStyleDelete){
//从您的数据源中删除已删除的对象。
//如果您的数据源是NSMutableArray,请执行此操作
[devices removeObjectAtIndex:indexPath.row];
[self.tableView reloadData]; //告诉表格立即刷新
}
}

在这里,我们可以使用滑动来删除其中的功能。

添加完毕后,您可以运行项目。在这一点上,您可以通过将对象向左滑动来查看操作。

动作时间

运行构建并开始一个接一个地执行所有步骤:

  1. 检查表视图对象是否在第一次启动中可见。 如果没有,请向其中添加必要的代码,以便避免崩溃。
  2. 接下来,检查屏幕顶部的按钮。 是否可以使用自定义警报框将对象添加到阵列中。
  3. 现在,检查是否正在向左滑动以删除功能。

在此处查看具有本教程提供的所有功能的快照。

此时,您可以看到表视图正在如我们先前所添加的那样在其中加载所有对象。

在这里您可以看到我们添加了一个自定义警报,以将新对象添加到我们的数组中。

您可以看到我们已将iOS的滑动删除功能添加到我们的应用程序中。

摘要

我希望您最终会发现此博客有用。 如果您的回答是肯定的,请告诉我您是否在不久的将来想要更多类似的教程。

如您所见,我们已经使用简单的编码技巧成功实现了应用程序的所有部分。 因此,在此之前要继续努力并继续学习。

连接源URL:

如何在目标C中的表视图中使用搜索栏功能?