zoukankan      html  css  js  c++  java
  • UISerachBar / UISearchDisplayController

    1. UISerachBar 

    继承与UIView, 包含uitextfield, 并且实现了uitextfielddelegate代理的主要内容

    含有取消按钮, 默认不显示

    2. UISerachDisplayController

    包含 uisearchbar, uitableview, uinavigaitionitem 以及 uiviewcontroller

    每一个uiviewcontroller有一个类型为UISerachDisplayController的属性, 但默认为nil

    demo:

    #import <UIKit/UIKit.h>
    
    @interface MainViewController : UITableViewController{
        NSArray *data;
        NSArray *filterData;
        UISearchDisplayController *searchDisplayController;
    }
    
    @end
    #import "MainViewController.h"
    
    @interface MainViewController ()
    
    @end
    
    @implementation MainViewController
    
    - (id)initWithStyle:(UITableViewStyle)style
    {
        self = [super initWithStyle:style];
        if (self) {
            data = [NSArray arrayWithObjects:@"Allan",@"Abbbb",@"Acccc",@"Bccccc",@"Cddddffk",@"Cddkllll",@"Ekkflfl",@"Ekljljfg" ,@"Leslie",@"Mm",@"Meinv",@"Meihi",@"Catilin",@"Arron", nil];
        }
        return self;
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width
                                                                               , 44)];
        searchBar.placeholder = @"搜索";
        
        // 添加 searchbar 到 headerview
        self.tableView.tableHeaderView = searchBar;
        
        // 用 searchbar 初始化 SearchDisplayController
        // 并把 searchDisplayController 和当前 controller 关联起来
        searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
        
        // searchResultsDataSource 就是 UITableViewDataSource
        searchDisplayController.searchResultsDataSource = self;
        // searchResultsDelegate 就是 UITableViewDelegate
        searchDisplayController.searchResultsDelegate = self;
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
    }
    
    #pragma mark - Table view data source
    
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return 1;
    }
    
    /*
     * 如果原 TableView 和 SearchDisplayController 中的 TableView 的 delete 指向同一个对象
     * 需要在回调中区分出当前是哪个 TableView
     */
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        if (tableView == self.tableView) {
            return data.count;
        }else{
            // 谓词搜索
            NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self contains [cd] %@",searchDisplayController.searchBar.text];
            filterData =  [[NSArray alloc] initWithArray:[data filteredArrayUsingPredicate:predicate]];
            return filterData.count;
        }
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *cellId = @"mycell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
        
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
        }
        
        if (tableView == self.tableView) {
            cell.textLabel.text = data[indexPath.row];
        }else{
            cell.textLabel.text = filterData[indexPath.row];
        }
        
        return cell;
    }
    
    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
        NSString *text;
        
        if (tableView == self.tableView) {
            text = data[indexPath.row];
        }else{
            text = filterData[indexPath.row];
        }
        
        NSLog(@"you click %d   %@",indexPath.row,text);
    }
    
    @end
  • 相关阅读:
    143、Java内部类之访问方法中定义的参数或变量
    142、Java内部类之在普通方法里面定义内部类
    141、Java内部类之实例化外部类对象
    140、Java内部类之实例化内部类对象
    139、Java内部类之使用this访问外部类属性
    138、Java内部类之访问内部类的私有属性
    137、Java内部类之把内部类放到外部
    136、Java的内部类
    135、Java中的静态块,构造方法和构造块
    134、Java中的构造方法和构造块
  • 原文地址:https://www.cnblogs.com/apem/p/4522416.html
Copyright © 2011-2022 走看看