iOS - UITableView

基本设置

self.myTableView.bounces = NO; // 取消弹簧效果
不要分割线:
self.myTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
选中不显示:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
//不显示垂直滚动条
self.myTableView.showsVerticalScrollIndicator = NO;
//右侧小箭头
 cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
//默认选中TableView第一行,没有动画及滚动效果,动画即滚动效果通过animated,position来设定

 [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionNone];

//获取当前选中的cell

    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
获取想要的cell
 UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] ];

分组

分组的类型选plain才不会有headView显示的错误,尽量不用headview不同机型容易出问题

头部设置

//返回每组头部view

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    NSString *str = [NSString stringWithString:_Mset[section]] ;
    NSArray *arr = [str componentsSeparatedByString:@"-"];
    str = [NSString stringWithFormat:@"  %@月%@日",arr[1],arr[2]];
    UIView *headerView = [[UIView alloc]init];
    headerView.backgroundColor = [UIColor groupTableViewBackgroundColor];
    UILabel *label = [[UILabel alloc]init];
    label.textColor = [UIColor grayColor];
    label.font = [UIFont systemFontOfSize:13];
    label.textColor = color_light_gray;
    label.frame = CGRectMake(10, 6, 100, 20);
    
    label.text = str;
    [headerView addSubview:label];
    return headerView;
}

分组取一

self.currentExpress =  [self.dictExpress objectForKey:self.firstPinyinArr[indexPath.section]];
self.currentModel = self.currentExpress[indexPath.row];

选中指定行并跳转

[self tableView:self.FirstCategoryTable didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:self.selectIndex inSection:0]];
    [self.FirstCategoryTable selectRowAtIndexPath:[NSIndexPath indexPathForRow:self.selectIndex inSection:0] animated:YES scrollPosition:UITableViewScrollPositionMiddle];

iOS监听tableView组头切换事件


- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section 组头将要出现的时候系统会调用;

- (void)tableView:(UITableView *)tableView didEndDisplayingHeaderView:(UIView *)view forSection:(NSInteger)section 组头出现的时候系统会调用;

利用以上两个方法可以判断出组头被顶出和组头又下拉回来事件,还有其他的组头相关动作可以监听需自己去编写。

cell背景透明

1,设置控制器的背景色
2,设置tableview透明
3,设置cell透明
4,设置cell 的view不透明

拿到Cell的值

cell的.h方法获取cell的一些控件值

带圆角的多个cell(只有前后有圆角)

self.currentExpress =  [self.dictExpress objectForKey:self.firstPinyinArr[indexPath.section]];
        self.currentModel = self.currentExpress[indexPath.row];
        self.currentExpressName = self.currentModel.name;
        self.currentExpressCode = self.currentModel.code;

        if (0 == indexPath.row) {
            [cell setName:self.currentExpressName andType:KCell_First];
        }else if (self.currentExpress.count -1 == indexPath.row){
            [cell setName:self.currentExpressName andType:KCell_Last];
        }else{
            [cell setName:self.currentExpressName andType:KCell_Other];
        }
Cell
-(void)setName:(NSString *)name andType:(NSString *)type{
    if ([@"isFirst" isEqualToString:type]) {
        UIBezierPath* rounded = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, screenWidth-24,40) byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(5, 5)];
        CAShapeLayer* shape = [[CAShapeLayer alloc] init];
        [shape setPath:rounded.CGPath];
        
        self.baseView.layer.mask = shape;
    }else if([@"isLast" isEqualToString:type]){
        UIBezierPath* rounded = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, screenWidth-24,40) byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake(5, 5)];
        CAShapeLayer* shape = [[CAShapeLayer alloc] init];
        [shape setPath:rounded.CGPath];
        
        self.baseView.layer.mask = shape;
    }
    self.expressName.text = name;
}

tableView头容器

头尾容器会和tableview一起动,而分组头不会动

sendDetailsHeadView * headView = [[NSBundle mainBundle]loadNibNamed:@"sendDetailsHeadView" owner:nil options:nil].lastObject;
    headView.bounds = CGRectMake(0, 0, screenWidth-30, 270);
    [headView setWithHeadModel:self.headModel];
    self.sendDetailsTable.tableHeaderView = headView;

代理方法

1,设置代理
2,实现方法
分组个数: numberOfSectionsInTableView
每组个数 :numberOfRowsInSection
加载 cell:cellForRowAtIndexPath
1,设置 cell 的复用 id(在 cell 中设置)
2,注册 id [self.detailTable registerNib:[UINib nibWithNibName:DailyPriceTimeCellID bundle:nil] forCellReuseIdentifier:DailyPriceTimeCellID];
(这里 nib 的 name 作为 Identifier,nibname 不能错)
3,复用DailyPriceTimeCell *cell = [tableView dequeueReusableCellWithIdentifier:DailyPriceTimeCellID];
[cell setUPModel:self.priceModel];
return cell;
设置分组头 :viewForHeaderInSection
分组头的高度:heightForHeaderInSection
设置每行的高度:heightForRowAtIndexPath
非等高 cell 要先设置估计高度:estimatedHeightForRowAtIndexPath

Cell按钮跳转

点击 cell 中的按钮实现界面的跳转,要在 cell 写代理,点击按钮调用代理,在 cell 的控制器中调用实现的代理方法。

-(void)goMyBuy
{

    myBuyAndSellPage * myBuy = [[myBuyAndSellPage alloc] initWithAction:kBuyOrSell_Buy];
    myBuy.hidesBottomBarWhenPushed = YES;
    [self.navigationController pushViewController:myBuy animated:YES];
}

长按cell删除

//    手势
    UILongPressGestureRecognizer  *labelLongPressGestureRecognizer = [[UILongPressGestureRecognizer  alloc] initWithTarget:self
                                                                                                                    action:@selector(deleteCardClick:)];
    // 2. 将点击事件添加到label上
    labelLongPressGestureRecognizer.minimumPressDuration=1.5f;
    [cell addGestureRecognizer:labelLongPressGestureRecognizer];
-(void)deleteCardClick:(UILongPressGestureRecognizer *)longRecognizer{

    if (longRecognizer.state == UIGestureRecognizerStateBegan) {//手势开始
        
        [self becomeFirstResponder];
        
        CGPoint location = [longRecognizer locationInView:self.cardBagTable];
        NSIndexPath * indexPath = [self.cardBagTable indexPathForRowAtPoint:location];
        //可以得到此时你点击的哪一行
        
        self.selectThirdModel = self.cardBag[indexPath.row];
        
    }
        UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"提示"
                                                                       message:@"删除卡包"
                                                                preferredStyle:UIAlertControllerStyleAlert];
        
        UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"删除" style:UIAlertActionStyleDefault
                                                              handler:^(UIAlertAction * action) {
                                                                  //响应事件
                                                                  [self canDeleteCard];
                                                              }];
        UIAlertAction* cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault
                                                             handler:^(UIAlertAction * action) {
                                                                 //响应事件
                                                                 
                                                             }];
        
        [alert addAction:defaultAction];
        [alert addAction:cancelAction];
        [self presentViewController:alert animated:YES completion:nil];
}

当超过tableView显示的范围的时候 后面显示的内容将会和前面重复

self.selectCellRow 记录当前选中的cell,只有刷新到选中cell的时候,才改到选中的状态

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
FirstCategoryCell *cell = [tableView dequeueReusableCellWithIdentifier:FirstCategoryCellID];
        cell.leftLine.hidden = YES;
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        if (indexPath.row == self.selectCellRow) {
            cell.leftLine.hidden = NO;
        }
        [cell setUpModel:self.fModels[indexPath.row]];
        return cell;
}

下拉放大脑壳

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    //往上滑动offset增加,往下滑动,yoffset减小
    CGFloat yoffset = scrollView.contentOffset.y;
    if (yoffset0) {//往上滑动
        
        self.headerView.frame = ({
            CGRect frame = originFrame;
            frame.origin.y = originFrame.origin.y - yoffset;
            frame;
        });
        
    }else {//往下滑动,放大处理
        self.headerView.frame = ({
            CGRect frame = originFrame;
            frame.size.height = originFrame.size.height - yoffset;
            frame.size.width = frame.size.height/scale;
            frame.origin.x = originFrame.origin.x - (frame.size.width-originFrame.size.width)/2;
            frame;
        });
        
    }
}

滚动到指定位置

滚动到指定位置

[self.SecondCategoryTable scrollToRow:0 inSection:0 atScrollPosition:UITableViewScrollPositionTop animated:YES];

滚动到指定位置并选中

[self.adressTable selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionTop];

你可能感兴趣的:(iOS - UITableView)