不疯不成魔

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
#import "RootController.h"

@interface RootController ()<UITableViewDataSource,UITableViewDelegate,UISearchBarDelegate,UISearchResultsUpdating>

@property (nonatomic, retain) NSMutableArray *dataList; // 存储数据源
@property (nonatomic, retain) NSMutableArray *searchList; // 存储搜索结果
@property (nonatomic, retain) UISearchController *searchController; // 管理搜索框

@end



@implementation RootController

- (void)dealloc {
    self.dataList = nil;
    self.searchList = nil;
    self.searchController = nil;
    [super dealloc];
}

// 懒加载
- (NSMutableArray *)dataList {
    if (!_dataList) {
        self.dataList = [NSMutableArray arrayWithCapacity:1];
        for (int i = 0; i < 50; i++) {
            [self.dataList addObject:[NSString stringWithFormat:@"%d - lanou", i]];
        }
    }
    return [[_dataList retain] autorelease];
}

- (NSMutableArray *)searchList {
    if (!_searchList) {
        self.searchList = [NSMutableArray arrayWithCapacity:1];
    }
    return [[_searchList retain] autorelease];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    
    // 设置负责更新搜索结果控制器内容的对象, 要遵守协议<UISearchResultsUpdating>
    self.searchController.searchResultsUpdater = self;
    
    // 在搜索的时候下面的内容是否变暗
    self.searchController.dimsBackgroundDuringPresentation = NO;
    
    // 在搜索的时候导航栏是否隐藏
    self.searchController.hidesNavigationBarDuringPresentation = NO;
    
    // 设置frame
    self.searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, self.searchController.searchBar.frame.origin.y, self.searchController.searchBar.frame.size.width, 44.0);
    
    // 将tableView 的页眉设置为searchBar
    self.tableView.tableHeaderView = self.searchController.searchBar;
    
//    self.searchController.searchBar.showsScopeBar = YES;
//    NSArray *titles = @[@"1", @"2"];
//    self.searchController.searchBar.scopeButtonTitles = titles;
    // 设置背景图片
    self.searchController.searchBar.backgroundImage = [UIImage imageNamed:@"banner"];
    
    // 设置背景颜色
    // 移除searchBarBackground
//    [[self.searchController.searchBar.subviews objectAtIndex:0] removeFromSuperview];
//    self.searchController.searchBar.backgroundColor = [UIColor redColor];
    
    // 样式
//    self.searchController.searchBar.barStyle = UIBarStyleDefault;
//    self.searchController.searchBar.barStyle = UIBarStyleBlackOpaque;
    
    
    [self.searchController release];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (BOOL)prefersStatusBarHidden {
    return YES;
}

#pragma mark -- UISearchBarDelegate
// 编辑输入事件
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
    
    return YES;
}// return NO to not become first responder
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
    
}// called when text starts editing
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar {
    return YES;
}// return NO to not resign first responder
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar {
    
}// called when text ends editing
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
    
}// called when text changes (including clear)
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text NS_AVAILABLE_IOS(3_0) {
    return YES;
}// called before text changes

// 点击按钮事件
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
    
}// called when keyboard search button pressed
- (void)searchBarBookmarkButtonClicked:(UISearchBar *)searchBar {
    
}// called when bookmark button pressed
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
    
}// called when cancel button pressed
- (void)searchBarResultsListButtonClicked:(UISearchBar *)searchBar NS_AVAILABLE_IOS(3_2) {
    
}// called when search results button pressed


// Scope 点击事件
- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope NS_AVAILABLE_IOS(3_0) {
    
}




#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
#warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
#warning Incomplete method implementation.
    // Return the number of rows in the section.
   
    // 如果对搜索框有操作
    if(self.searchController.active) {
        return [self.searchList count];
    }else {// 如果对搜索框没有操作
        return [self.dataList count];
    }
}

#pragma mark -- UISearchResultsUpdating
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {
    
    // 谓词 NSPredicate -- 它的操作是针对于数组类型的, 就好比数据库中的查询, 数据源就是数组, 好处是: 不需要写很多代码去操作数组, 同时也起到了过滤的作用. 我们可以编写简单的谓词语句, 就可以从数组中过滤出想要的数据.
    NSString *searchStr = [self.searchController.searchBar text];
    
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@", searchStr];
    // SELF CONTAINS[c] %@, SELF表示要查询集合对象, CONTAINS[c]表示包含字符串, 其中c 不区分大小写.
    
    if (self.searchList != nil) {
        [self.searchList removeAllObjects];
    }
    // 过滤数据
    self.searchList = [NSMutableArray arrayWithArray:[self.dataList filteredArrayUsingPredicate:predicate]];
    
    // 刷新表格
    [self.tableView reloadData];
    
}




- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *identifer = @"reuse";
    
    // 根据重用标志, 去tableView的重用队列中取可用的cell
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifer];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifer];
    }
    
    // cell显示的内容
    if (self.searchController.active) {
        cell.textLabel.text = self.searchList[indexPath.row];
    }else {
        cell.textLabel.text = self.dataList[indexPath.row];
    }
    
    // Configure the cell...
    
    return cell;
}




@end

 

posted on 2015-09-18 17:34  不疯不成魔  阅读(223)  评论(0编辑  收藏  举报