不用UIsearchController实现搜索功能

本文介绍了一种不依赖UIsearchController的iOS搜索功能实现方法,通过使用UISearchBar与UITableView结合完成搜索展示,适用于iOS 8以下版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前写了一篇用UIsearchController实现搜索功能, 但是万一我们不想用呢, 毕竟UIsearchController只能在IOS8以上运行, 低版本会Crash,下面介绍一下不用它的情况下,实现搜索功能, 其实也很简单,用searchBar + tableView就可以了

1.搜索页面.h文件

//

//  SearchViewController.h

//  搜索界面

#import <UIKit/UIKit.h>

#import "AFNetworking.h"

@interface SearchViewController :UIViewController<UISearchBarDelegate,UITableViewDataSource, UITableViewDelegate>

// mySearchController

@property (nonatomic,retain) UISearchController *mySearchController;

// 存放搜索出结果的数组

@property (nonatomic,retain) NSMutableArray *searchResultDataArray;

// searchBar

@property (nonatomic,retain) UISearchBar *bar;

// 搜索框输入的东西

@property (nonatomic,copy) NSString *inputText;

// 显示搜索结果的tableView

@property (nonatomic,retain) UITableView *myTableView;

// 放tableView的View

@property (nonatomic,retain) UIView *view1;


@end


2.搜索页面.m文件
(1) 创建searchBar

- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view.

     self.view.backgroundColor = [UIColorwhiteColor];

    // 创建searchBar

   self.bar=[[UISearchBaralloc]init];

    self.navigationItem.title =@"搜索漫画";

    

    //设置barframe

   self.bar.frame=CGRectMake(0,64, FRAME.size.width,35);

    [self.viewaddSubview:self.bar];

    self.bar.placeholder = @"漫画名/作者/类型";

    // 设置键盘类型

    self.bar.keyboardType = UIKeyboardTypeNamePhonePad;

    // searchBar  代理

   self.bar.delegate =self;


        

}


(2)  点击searchBar后, UISearchBar的代理方法

// 当开始编辑,即使是空,也触发

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar

{

// 创建一个View1

    self.view1 = [[UIViewalloc] initWithFrame:CGRectMake(0,50, self.view.frame.size.width,self.view.frame.size.height)];

// 创建一个放搜索结果的tableView

   self.myTableView = [[UITableViewalloc] initWithFrame:self.view1.frame];

// 把tableView放在view1上

    [self.view1addSubview:self.myTableView];

// View上放View1

    [self.viewaddSubview:self.view1];

    [self.viewbringSubviewToFront:self.bar];

    // 先不让View1显示, 否则会挡住搜索界面

   self.view1.hidden =NO;

    self.myTableView.dataSource =self;

    self.myTableView.delegate =self;

}


(3) 开始搜索,输入内容

// 当搜索框的内容改变,即使是空

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText

{

// 接收输入的内容

    self.inputText =self.bar.text;

   self.view1.hidden =NO;

// 调用数据请求方法, 接口参数传入self.inputText;

    [selfdd];

    NSLog(@"input :%@",self.inputText);

    

}


(4) 开始数据请求,并且解析(用系统工具请求)

// 搜索请求

- (void)dd

{

    //  NSLog(@"post 异步");

    NSString *url_string = [NSStringstringWithFormat:@"http://aaaaaa?name=%@&type=2",self.inputText];

    NSString *url = [url_stringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

   NSURL *url1 = [NSURLURLWithString:url];

    NSMutableURLRequest *request1 = [NSMutableURLRequestrequestWithURL:url1];

    // post 异步请求 block

    // 参数1.request对象

    // 参数2.多线程队列NSOperationQueue对象

    [NSURLConnectionsendAsynchronousRequest:request1 queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response,NSData *data, NSError *connectionError) {

       NSLog(@"ssssss%@", response);

#pragma mark -- 遇到block 一定是回调回来的参数就是你要的数据

        NSDictionary *dic = [NSJSONSerializationJSONObjectWithData:dataoptions:0error:nil];

        // NSMutableDictionary *dic = [NSMutableDictionary dictionary];

        // dic = responseObject;

       NSLog(@"嘎嘎嘎嘎嘎嘎个%@", dic);

        

        self.searchResultDataArray = [NSMutableArrayarray];

       NSMutableDictionary *dic1 = [dic objectForKey:@"info"];

       NSMutableDictionary *dic2 = [dic1 objectForKey:@"data"];

       NSMutableArray *array = [dic2 objectForKey:@"items"];

       for (NSMutableDictionary *dicin array) {

           Comicslist *comics = [[Comicslistalloc] init];

            comics.bigbook_id = [NSStringstringWithFormat:@"%@", [dicobjectForKey:@"id"]];

            comics.bigbook_name = [dicobjectForKey:@"name"];

            comics.bigbook_author = [dicobjectForKey:@"author"];

            comics.coverurl = [dicobjectForKey:@"coverurl"];

            // NSString *key = [dic objectForKey:@"key_name"];

            // comics.key_name = [NSString stringWithFormat:@"%@%@",comics.bigbook_name, comics.bigbook_author];

            [self.searchResultDataArrayaddObject:comics];

        }

        [self.myTableViewreloadData];

    }];

    

    

}


(5)既然请求下了数据,那么设置tableView吧

// 设置搜索tableView section个数

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView

{

   return 1;

}


// 设置搜索tableViewcell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

   static NSString *cellIdentifier =@"indenfy";

   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

   if (cell == nil) {

        cell = [[UITableViewCellalloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:cellIdentifier];

    }

// 如果有搜索的内容, 显示搜索结果

    if (self.searchResultDataArray.count != 0) {

       Comicslist *comics = [self.searchResultDataArrayobjectAtIndex:indexPath.row];

        cell.textLabel.text = comics.bigbook_name;

       NSString *str = comics.coverurl;

       NSURL *url = [NSURLURLWithString:str];

        UIImage *image = [UIImageimageWithData:[NSDatadataWithContentsOfURL:url]];

        

        cell.imageView.image = image;

        

    }

// 如果没有搜索结果的话, 提示没有查找的内容

   else{

        cell.textLabel.text =@"没有查找的内容";

        cell.imageView.image =nil;

    }

    

   return cell;

}


// 设置cell高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

   return 100;

}


// 设置搜索tableView cell个数

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

// 如果没有查找到数据, 返回一行

    if (_searchResultDataArray.count ==0) {

       NSLog(@"33333");

       return 1;

    }

// 如果有查找到东西, 显示个数为查找到得个数

    return_searchResultDataArray.count;

}




// 设置搜索tableView 点击进入搜索结果

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

   // 点击搜索结果跳转操作

}


(6) 细节处理
// 点击键盘的search按钮,再请求一遍数据

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar

{

    [selfdd];

}


// 当界面要显示的时候

- (void)viewWillAppear:(BOOL)animated

{

   self.view1.hidden =YES;

// 回收键盘

    [self.barresignFirstResponder];

   

}


// 取消按钮触发方法

-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar

{

   self.bar.text =nil;

   self.view1.hidden =YES;

// 回收键盘

    [self.barresignFirstResponder];

}


下面看一下运行结果

1. 进入搜索界面



2. 点击触发




3. 输入内容






4. 点击取消按钮



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值