day14---UITableViewCell

1.如何自定义UITableViewCell
2.QQ折叠效果
3.UISearchController 搜索框

一.如何自定义UITableViewCell
步骤:
1)自己创建一个类MyCell,继承自UITableViewCell;
2)在第三问cellForRow这个方法中,把之前的凡是用到UITableViewCell的地方,全部修改成MyCell;

【Demo】-【1-CustomCell】

从本地的plist文件拿数据方法:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Limit" ofType:@"plist"];
NSArray *array = [NSArray arrayWithContentsOfFile:filePath];

成员变量中声明的bool值,默认为NO;

二 QQ折叠
思路:
1)给每个分区自定义一个头部视图【能被点击】
//点击头部视图,响应方法
//自定义头部视图,头部视图继承自UiView

//返回自定义的分区头部视图
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
return self.sectionHeaderArray[section];

}

//返回分区头部视图的高度
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 40;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//让状态在展开和收缩之间切换
self.isAppear = !self.isAppear;

[UIView animateWithDuration:0.2 animations:^{
    if (self.isAppear == YES) {
        //展开,箭头旋转90度
        self.imgView.transform = CGAffineTransformRotate(self.imgView.transform, M_PI_2);
        
    }else
    {
        //收缩,箭头逆时针旋转90度
        self.imgView.transform = CGAffineTransformRotate(self.imgView.transform, -M_PI_2);
    }
}];

//刷新tableView
self.block();

}

2)根据点击头部视图来控制是够要展开还是收缩,如果是收缩,那么让该分区返回的行数为0;如果是展开状态,那么让该分区返回的行数为具体的好友个数; 【** 主要在第二问中实现 **】

3)给头部视图加一个属性BOOL值,用于记录当点击头部视图之后,是要收缩还是展开;每次点击之后,修改BOOL的值,并刷新tableView;

【Demo】-【2-QQ_ZheDie】
  • (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    //折叠效果的核心思想
    SectionHeaderView *view = self.sectionHeaderArray[section];
    CategoryModel *model = self.dataArray[section];

return view.isAppear?model.friends.count:0;

}

三 搜索
搜索出结果后,传入一个需要展示的数组(携带数据),在一个独立的tableView中展示出来的;

-(void)creatSearchBar
{
//创建显示搜索结果的控制器对象
self.sResultVC = [[SearchResultTableViewController alloc] init];

//1.创建一个UISearchControler对象,并制定显示搜索结果的tableView
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.sResultVC];

//2.将搜索控制器跟当前的self进行关联
self.searchController.searchResultsUpdater = self;

//3.searchBar自适应位置
[self.searchController.searchBar sizeToFit];

//4.把searchBar显示self.tableView在头部视图
self.tableView.tableHeaderView = self.searchController.searchBar;


//5.表示该视图控制器的视图是否被覆盖
self.definesPresentationContext = YES;

}

pragma mark -UISearchResultsUpdating

//当用户输入文本的时候开始调用

  • (void)updateSearchResultsForSearchController:(UISearchController *)searchController
    {
    NSLog(@"%@",searchController.searchBar.text);
    //把搜索出来的符合条件的结果存在一个数组中
    NSMutableArray *resultArray = [NSMutableArray array];
    for (CategoryModel *model in self.dataArray) {
    for (FriendsModel *fModel in model.friends) {

          //字符串的查找
          NSRange range = [fModel.name rangeOfString:searchController.searchBar.text];
          if (range.length>0) {
              //找到了符合条件的fModel,然后加入数组中
              [resultArray addObject:fModel];
          }
          
      }
    

    }

    //将搜索之后的结果交给显示搜索结果的控制器显示出来
    self.sResultVC.resultArray = resultArray;
    [self.sResultVC.tableView reloadData];

}

根据字符串长度重新计算frame

  //第一个参数:最大的宽和最大的高度,达不到这个高度会自动缩小  是进行自适应的尺寸 
    
  //第二个参数   option 布局格式 NSStringDrawingUsesLineFragmentOrigin
       option:文本绘制时的附加选项

有四种类型:
1.NSStringDrawingTruncatesLastVisibleLine :
2.NSStringDrawingUsesLineFragmentOrigin :

  1. NSStringDrawingUsesFontLeading :
  2. NSStringDrawingUsesDeviceMetrics :

通常使用NSStringDrawingUsesLineFragmentOrigin,如果options参数为NSStringDrawingUsesLineFragmentOrigin,那么整个文本将以每行组成的矩形为单位计算整个文本的尺寸。
如果为NSStringDrawingTruncatesLastVisibleLine或者NSStringDrawingUsesDeviceMetric,那么计算文本尺寸时将以每个字或字形为单位来计算
如果为NSStringDrawingUsesFontLeading则以字体间的行距(leading,行距:从一行文字的底部到另一行文字底部的间距。)来计算
//第三个参数:将文本UIFront存入字典传到这里 字符串的属性
字典@{NSFontAttributeName:[UIFont systemFontOfSize:17]};

  //第四个参数:context:context上下文。包括一些信息,例如如何调整字间距以及缩放。最终,该对象包含的信息将用于文本绘制。该参数可为 nil 
        
    CGRect rect =    [str1 boundingRectWithSize:CGSizeMake(320, 10000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:17]} context:nil];

你可能感兴趣的:(day14---UITableViewCell)