zoukankan      html  css  js  c++  java
  • UI基础之UITableViewController

    UITableViewController在实际项目中很重要

    tableView上面不能加子视图addSubviews 所有的都要在cell上加来实现

    程序并不知道有多少数据要放入,所以要通过一个代理来实现数据的传送

    #import "ViewController.h"

     

    @interface ViewController ()<UITableViewDelegate,UITableViewDataSource>

    /** 数据数组*/

    @property(nonatomic,strong) NSArray * dataArray;

    @end

    @implementation ViewController

    - (void)viewDidLoad {

        [super viewDidLoad];  

        //加载数据

        [self loadData];

        //加载子视图

        [self setSubviews];

    }

    #pragma mark - 加载数据

    - (void)loadData{

        self.dataArray= [UIFont familyNames];

    }

    #pragma mark - 加载子视图

    - (void)setSubviews{

         UITableView * tableView=[[UITableView alloc] initWithFrame:CGRectMake(0, 0, 375, 667) style:UITableViewStylePlain];

        //设置属性代理

        tableView.delegate=self; 

        //设置数据源代理

        tableView.dataSource=self;  

        [self.view addSubview:tableView];

    }

    #pragma mark - 实现tabView代理方法

    #pragma mark  * 返回需要展示的数据行数

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

        return self.dataArray.count;

    }

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

        UITableViewCell * cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];

        

    static NSString * identy=@"jrcell";

        //上面tableView已经传入了

        //先根据当前的标志去缓冲池去寻找对应的cell

        UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:identy];

        

        if (cell==nil) {

            cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identy];

            

            cell.backgroundColor=[UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0  blue:arc4random()%255/255.0  alpha:1];

            NSLog(@"=====%ld",indexPath.row);

        }

        //根据当前的cell的行数,取出对应的数组数据

        NSString * text=self.dataArray[indexPath.row];

        

        //将数据赋值给cell

        cell.textLabel.text=text;

        

        cell.textLabel.font=[UIFont fontWithName:text size:18];

        

        return cell;

        

     

    }

     

    @end

     

    系统给出的cell无法满足设计要求时 要进行cell自定义

     

     

    以及tableView的各种代理方法的实现

     

    #pragma mark - tableView 代理方法

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

        

        //唯一标示

        static NSString * identy=@"cell";

     

        JRTableViewCell * cell=[tableView dequeueReusableCellWithIdentifier:identy];

        if (cell==nil) {

            

            cell=[[JRTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identy];

        }

        

        cell.news=self.newsArray[indexPath.row];

        cell.textLabel.textColor=[UIColor redColor];

        

    //    //判断当前cell是不是在选中队列当中

        if ([self.selectArray containsObject:@(indexPath.row)]) {

            cell.accessoryType=UITableViewCellAccessoryCheckmark;

        }else{

            cell.accessoryType=UITableViewCellAccessoryNone;

        }

     

        return cell;

        

    }

     

     

     

    - (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

     

        return self.newsArray.count;

        

    }

     

     

     

     

    #pragma mark - 导航按钮点击事件

    #pragma mark * 左边

    - (void) leftClickAction{

        

        //给数组增加数据

        JRNews * news=[[JRNews alloc] init];

        news.time=@"4小时前";

        news.title=@"aahaaha";

        news.imgPath=@"http://cdn.duitang.com/uploads/item/201510/11/20151011195344_aVZRx.jpeg";

        [self.newsArray insertObject:news atIndex:0];

        

        

        NSIndexPath * indexPath=[NSIndexPath indexPathForRow:0 inSection:0];

        

        [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationMiddle];

        

     

    }

     

    #pragma mark * 右边

    - (void) rightClickAction{

        [self.tableView setEditing:YES animated:YES];

    }

     

     

     

     

    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

        

        //1 根据当前的indexPath 获取对应的cell

         JRTableViewCell *cell =[tableView cellForRowAtIndexPath:indexPath];

        //2 cell添加选中附件

         cell.accessoryType=UITableViewCellAccessoryCheckmark;

        

        //3 将选中的当前索引放入数组

        [self.selectArray addObject:@(indexPath.row)];

        

    }

     

     

    #pragma mark - cell编辑

    -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{

        

        if (editingStyle==UITableViewCellEditingStyleDelete) {

          

            

            [self.newsArray removeObjectAtIndex:indexPath.row];

            [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight];

            

            

            

        }else if(editingStyle==UITableViewCellEditingStyleInsert){

            NSLog(@"你点击了增加");

        }else{

            NSLog(@"我不知道你点击了什么");

        }

        

    }

     

    #pragma mark - 返回编辑类型

    - (UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{

        

        return UITableViewCellEditingStyleDelete;

     

    }

     

     

    #pragma mark - 设置删除按钮文本

    - (NSString *) tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{

        

        if(indexPath.row%2){

            return @"奇数";

        }else{

            return @"偶数";

     

        }

    }

     

    //泛型

    -(NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{

     

        UITableViewRowAction * action=[UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"置顶" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {

            NSLog(@"点击置顶");

        }];

        action.backgroundColor=[UIColor grayColor];

        

        

        UITableViewRowAction * action2=[UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"发送" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {

            NSLog(@"点击发送");

        }];

        

         action2.backgroundColor=[UIColor greenColor];

        

        

        return @[action,action2];

     

    }

  • 相关阅读:
    PHP防盗链的基本思想&&防盗链的设置方法
    PHP程序员遇到职业问题时,是离职?还是坚持?
    如何学习Linux性能优化?
    PHP到底有多牛?你所知道的网站都在用它
    Linux 与 Unix 到底有什么不同?区别在哪?
    用PHP打造一个高性能好用的网站
    七夕-心形表白-简单css代码
    css雪碧图-css精灵图
    jquery-时间轴滑动
    js-进度条-动画
  • 原文地址:https://www.cnblogs.com/gzoof/p/5586844.html
Copyright © 2011-2022 走看看