iOS-搜索框 模糊查詢 1 (UISearchController 和 UISearchBar)

一迅栅、模糊查詢

第一種方法:UISearchController

    1.代理協(xié)議 和 屬性    相關

        代理協(xié)議:
        UITableViewDelegate,UITableViewDataSource,UISearchControllerDelegate,UISearchResultsUpdating
    
        屬性:
        //tableView
        @property (strong, nonatomic)  UITableView *tableView;
        //searchController
        @property (strong, nonatomic)  UISearchController *searchController;
        //數(shù)據(jù)源
        @property (strong,nonatomic) NSMutableArray  *dataList;
        @property (strong,nonatomic) NSMutableArray  *searchList;

    2.數(shù)組初始化和創(chuàng)建tableview searchcontroller

        - (void)viewDidLoad {
            [super viewDidLoad];
            
            _dataList = [NSMutableArray array];
            _searchList = [NSMutableArray array];
            
            self.dataList=[NSMutableArray arrayWithCapacity:100];
            
            //產(chǎn)生100個“數(shù)字+三個隨機字母”
            for (NSInteger i=0; i<100; i++) {
                [self.dataList addObject:[NSString stringWithFormat:@"%ld%@",(long)i,[self shuffledAlphabet]]];
            }
            
            //創(chuàng)建UISearchController
            self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil];
            //設置代理
            _searchController.delegate = self;
            _searchController.searchResultsUpdater= self;
            //設置UISearchController的顯示屬性口叙,以下3個屬性默認為YES
            //搜索時,背景變暗色
            _searchController.dimsBackgroundDuringPresentation = NO;
            //搜索時雪位,背景變模糊
            _searchController.obscuresBackgroundDuringPresentation = NO;
            //隱藏導航欄
            _searchController.hidesNavigationBarDuringPresentation = NO;
            _searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, self.searchController.searchBar.frame.origin.y, self.searchController.searchBar.frame.size.width, 44.0);
            _searchController.searchBar.searchBarStyle = UISearchBarStyleMinimal;
            _searchController.searchBar.backgroundColor = [UIColor whiteColor];
            
            /// tableview
            _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 20,WIDTH ,HEIGHT-64) style:UITableViewStylePlain];
            _tableView.delegate = self;
            _tableView.dataSource = self;
            _tableView.separatorStyle = UITableViewCellSelectionStyleNone;
        //    _tableView.bounces = NO;
            _tableView.showsVerticalScrollIndicator = NO;
            [self.view addSubview:_tableView];
            _tableView.tableHeaderView = _searchController.searchBar;
    
                }
    
    3.假數(shù)據(jù)隨機方法 和 相關代理

        //產(chǎn)生3個隨機字母
        - (NSString *)shuffledAlphabet {
            
            NSMutableArray * shuffledAlphabet = [NSMutableArray arrayWithArray:@[@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z"]];
            
            NSString *strTest = [[NSString alloc]init];
            for (int i=0; i<3; i++) {
                int x = arc4random() % 25;
                strTest = [NSString stringWithFormat:@"%@%@",strTest,shuffledAlphabet[x]];
            }
            
            return strTest;
            
        }
        
        
        //設置區(qū)域的行數(shù)
        -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
            if (self.searchController.active) {
                return [self.searchList count];
            }else{
                return [self.dataList count];
            }
        }
        
        
        //返回單元格內(nèi)容
        -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
            static NSString *flag=@"cell";
            UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:flag];
            if (cell==nil) {
                cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:flag];
            }
            if (self.searchController.active) {
                [cell.textLabel setText:self.searchList[indexPath.row]];
            }
            else{
                [cell.textLabel setText:self.dataList[indexPath.row]];
            }
            return cell;
        }

        #pragma mark - UISearchControllerDelegate代理
        
        //測試UISearchController的執(zhí)行過程
        
        - (void)willPresentSearchController:(UISearchController *)searchController
        {
            NSLog(@"willPresentSearchController");
        }
        
        - (void)didPresentSearchController:(UISearchController *)searchController
        {
            NSLog(@"didPresentSearchController");
        }
        
        - (void)willDismissSearchController:(UISearchController *)searchController
        {
            NSLog(@"willDismissSearchController");
        }
        
        - (void)didDismissSearchController:(UISearchController *)searchController
        {
            NSLog(@"didDismissSearchController");
        }
        
        - (void)presentSearchController:(UISearchController *)searchController
        {
            NSLog(@"presentSearchController");
        }
        
        
        -(void)updateSearchResultsForSearchController:(UISearchController *)searchController {
            
            // 修改UISearchBar右側的取消按鈕文字顏色及背景圖片
            searchController.searchBar.showsCancelButton = YES;
            for (id searchbuttons in [[searchController.searchBar subviews][0] subviews]) //只需在此處修改即可
                
                if ([searchbuttons isKindOfClass:[UIButton class]]) {
                    UIButton *cancelButton = (UIButton*)searchbuttons;
                    // 修改文字顏色
                    [cancelButton setTitle:@"返回"forState:UIControlStateNormal];
                    [cancelButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
                }
        
            
            NSLog(@"updateSearchResultsForSearchController");
            NSString *searchString = [self.searchController.searchBar text];
            NSPredicate *preicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@", searchString];
            if (self.searchList!= nil) {
                [self.searchList removeAllObjects];
            }
            //過濾數(shù)據(jù)
            self.searchList= [NSMutableArray arrayWithArray:[_dataList filteredArrayUsingPredicate:preicate]];
            //刷新表格
            [self.tableView reloadData];
        }

第二種方法:UISearchBar

        1.代理和屬性

            UITableViewDelegate,UITableViewDataSource,UISearchBarDelegate

            //tableView
            @property (strong, nonatomic)  UITableView *tableView;
            //searchBar
            @property (nonatomic , strong) UISearchBar *search;
            @property (nonatomic , strong) UIButton *searchCancleBtn;
            
            //數(shù)據(jù)源
            @property (strong,nonatomic) NSMutableArray  *dataList;
            @property (strong,nonatomic) NSMutableArray  *searchList;

        2.初始化

            /** 搜索框背景圖片的封裝方法 */
            - (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size{
                CGRect recte = CGRectMake(0, 0, size.width, size.height);
                UIGraphicsBeginImageContext(recte.size);
                CGContextRef context = UIGraphicsGetCurrentContext();
                
                CGContextSetFillColorWithColor(context, [color CGColor]);
                CGContextFillRect(context, recte);
                
                UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
                UIGraphicsEndImageContext();
                
                return image;
            }

            - (void)viewDidLoad {
                [super viewDidLoad];
        
                _dataList = [NSMutableArray array];
                _searchList = [NSMutableArray array];
                
                self.dataList=[NSMutableArray arrayWithCapacity:100];
                
                //產(chǎn)生100個“數(shù)字+三個隨機字母”
                for (NSInteger i=0; i<100 xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed i=0; xss=removed xss=removed> 0) {
                    return [self.searchList count];
                }else{
                    return [self.dataList count];
                }
            }
            
            
            //返回單元格內(nèi)容
            -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
                static NSString *flag=@"cell";
                UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:flag];
                if (cell==nil) {
                    cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:flag];
                    cell.backgroundColor = [UIColor yellowColor];
                }
                if (self.inputString && self.inputString.length > 0) {
                    [cell.textLabel setText:self.searchList[indexPath.row]];
                }
                else{
                    [cell.textLabel setText:self.dataList[indexPath.row]];
                }
                return cell;
            }

二、UISearchBar

第一種方式

        1.創(chuàng)建UISearchBar
    
            UIView *bgView = [[UIView alloc]initWithFrame:CGRectMake(0, 72, WIDTH, HEIGHT/16+10)];
            bgView.backgroundColor = WHITECOLOR;
            [self.view addSubview:bgView];
            
            UISearchBar *search = [[UISearchBar alloc]initWithFrame:CGRectMake(5, 5, WIDTH-10, HEIGHT/16)];
            search.placeholder =  @"搜索朋友";
            search.backgroundColor = REDCOLOR;
            search.backgroundImage = [self imageWithColor:WHITECOLOR size:search.bounds.size];
            search.layer.borderColor = CAOGREENCOLOR.CGColor;
            search.layer.borderWidth = 2;
            search.layer.cornerRadius = 3;
            search.clipsToBounds = YES;
            [bgView addSubview:search];
        
        2.搜索框表象封裝方法
            
        /** 搜索框背景圖片的封裝方法 */
        - (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size{
            CGRect recte = CGRectMake(0, 0, size.width, size.height);
            UIGraphicsBeginImageContext(recte.size);
            CGContextRef context = UIGraphicsGetCurrentContext();
        
            CGContextSetFillColorWithColor(context, [color CGColor]);
            CGContextFillRect(context, recte);
            
            UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();
            
            return image;
        }

        - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
            self.inputString = searchText;
            NSPredicate *preicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@", searchText];
            if (self.searchList!= nil) {
                [self.searchList removeAllObjects];
            }
            //過濾數(shù)據(jù)
            self.searchList = [NSMutableArray arrayWithArray:[_dataList filteredArrayUsingPredicate:preicate]];
            
            //刷新表格
            [self.tableView reloadData];
        
        }

第二種方式

        //搜索框
        self.search = [[UISearchBar alloc]initWithFrame:CGRectMake(100, 30, WIDTH-100-100, 30)];
      self.search.placeholder =  @"請搜索輸入";
      self.search.searchBarStyle = UISearchBarStyleMinimal;
      self.search.delegate = self;
      self.navigationItem.titleView = self.search;
      //    [search setBackgroundImage:[[UIImage alloc] init]];
      //    [search setImage:[UIImage imageNamed:@"error.png"] forSearchBarIcon:UISearchBarIconClear     state:UIControlStateNormal];
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市阎肝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌业稼,老刑警劉巖盗痒,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異低散,居然都是意外死亡俯邓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門熔号,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稽鞭,“玉大人,你說我怎么就攤上這事引镊‰蹋” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵弟头,是天一觀的道長吩抓。 經(jīng)常有香客問我,道長赴恨,這世上最難降的妖魔是什么疹娶? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮伦连,結果婚禮上雨饺,老公的妹妹穿的比我還像新娘。我一直安慰自己惑淳,他們只是感情好额港,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著歧焦,像睡著了一般移斩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天叹哭,我揣著相機與錄音忍宋,去河邊找鬼。 笑死风罩,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的舵稠。 我是一名探鬼主播超升,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼哺徊!你這毒婦竟也來了室琢?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤落追,失蹤者是張志新(化名)和其女友劉穎盈滴,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轿钠,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡巢钓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了疗垛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片症汹。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖贷腕,靈堂內(nèi)的尸體忽然破棺而出背镇,到底是詐尸還是另有隱情,我是刑警寧澤泽裳,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布瞒斩,位于F島的核電站,受9級特大地震影響涮总,放射性物質(zhì)發(fā)生泄漏胸囱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一妹卿、第九天 我趴在偏房一處隱蔽的房頂上張望旺矾。 院中可真熱鬧,春花似錦夺克、人聲如沸箕宙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柬帕。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間陷寝,已是汗流浹背锅很。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凤跑,地道東北人爆安。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像仔引,于是被迫代替她去往敵國和親扔仓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容