zoukankan      html  css  js  c++  java
  • UITableView的一些常用设置和代理方法

    - (void)viewDidLoad {

        [super viewDidLoad];

        

        tableview = [[UITableView alloc]initWithFrame:CGRectMake(0, 0,self.view.bounds.size.width,self.view.bounds.size.height)style:UITableViewStyleGrouped];

        

        //    UITableViewStylePlain,

        //    UITableViewStyleGrouped

        

        tableview.delegate =self;//不要忘写了这两句话哟调用delegate*/

        tableview.dataSource=self;

        

        /*改变 UITableViewStyleGrouped 样式的 背景色 */

        tableview.backgroundView = [[UIView alloc]init];

        tableview.backgroundColor = [UIColor clearColor];

        

        [self.view addSubview:tableview];

        

        NSMutableArray *arrayValue = [[NSMutableArray alloc]init];

        NSMutableArray *arrayImageValue = [[NSMutableArray alloc]init];

        NSMutableArray *arrayImageValue2 = [[NSMutableArray alloc]init];

        for (int i = 1; i<= 5; i++)

        {

            NSString *value = [NSString stringWithFormat:@"%d",i];

            NSString *imageName = [NSString stringWithFormat:@"image%@.png",value];

            UIImage *image = [UIImage imageNamed:imageName];

            //        NSLog(@"imageName == %@",imageName);

            [arrayValue addObject:value];

            [arrayImageValue addObject:image];

        }

        

        

        for (int i = 6;i<=10; i++ )

        {

            NSString *value = [NSString stringWithFormat:@"%d",i];

            NSString *imageName = [NSString stringWithFormat:@"image%@.png",value];

            UIImage *image = [UIImage imageNamed:imageName];

            [arrayImageValue2 addObject:image];

            

        }

        array1 = arrayValue;

        arrayImage = arrayImageValue;

        arrayImage1 =arrayImageValue2;

        

      /*

        //添加一个BarButton用来控制cell的移动

        UIBarButtonItem *moveButton = [[UIBarButtonItem alloc]

                                       initWithTitle:@"移动"

                                       style:UIBarButtonItemStylePlain

                                       target:self

                                       action:@selector(toggleMove)];

        self.navigationItem.rightBarButtonItem = moveButton;

        //默认设置cell不可编辑

        [tableview setEditing:tableview.editing=NO];

        */

    }

    /**

     *explain:事件响应toggleMove

     */

    //-(void)toggleMove

    //{

    //    //设置cell编辑模式取反

    //    [tableview setEditing:!tableview.editing];

    //    

    //    //初始话时默认不可编辑 点击事件的时候取反 为真!可编辑

    //    

    //    if (self.tableview.editing)

    //    {

    //        [self.navigationItem.rightBarButtonItem setTitle:@"完成"];

    //    }else

    //    {

    //        [self.navigationItem.rightBarButtonItem setTitle:@"移动"];

    //    }

    //    

    //}

    /**

     *explain:设置cell是否可以移动(滑动)

     */

    //- (BOOL)tableView:(UITableView *)tableView

    //canMoveRowAtIndexPath:(NSIndexPath *)indexPath

    //{

    //    return YES; //可以移动

    //}

    ///**

    // *explain:设置cell的插入和删除位置

    // */

    //- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath   toIndexPath:(NSIndexPath *)toIndexPath {

    //    NSUInteger fromRow = [fromIndexPath row];  //要移动的那个cell integer

    //    NSUInteger toRow = [toIndexPath row]; //要移动位置的那个clell integer

    //    //arrayValue 添加数据的那个可变数组

    //    id object = [_arrayValue objectAtIndex:fromRow]; // 获取数据

    //    [_arrayValue removeObjectAtIndex:fromRow];  //在当前位置删除

    //    [_arrayValue insertObject:object atIndex:toRow]; //插入的位置

    //    

    //}

    /**

     *explain:设置编辑样式:editingStyle(三种)

     typedef NS_ENUM(NSInteger, UITableViewCellEditingStyle) {

     UITableViewCellEditingStyleNone, 只有移动

     UITableViewCellEditingStyleDelete,滑动显示删除

     UITableViewCellEditingStyleInsert,编辑模式和滑动

     */

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

    {

        return UITableViewCellEditingStyleDelete;  //滑动出现删除操作,出现的红色按钮(删除这个方法默认是这个模式)

        

    }

    /*改变删除按钮的title*/

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

    {

        return @"删除";  //默认返回“delete”,这里我们改为中文

    }

    /*删除cell用到的函数*/

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

    {

        if (editingStyle == UITableViewCellEditingStyleDelete)

        {

            [_arrayValue removeObjectAtIndex:[indexPath row]];  //删除数组里的数据

            //删除对应数据的cell,[这里没有做更新数据的操作]

            [tableview deleteRowsAtIndexPaths:[NSMutableArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

        }

    }

    /* 这个函数是显示tableview的章节数*/

    -(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView

    {

        return 2;

    }

    /* 这个函数是指定显示多少cells*/

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

    {

        return [array1 count];//这个是指定加载数据的多少即显示多少个cell,如过这个地方弄错了会崩溃的哟

    }

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

    {

        //定义个静态字符串为了防止与其他类的tableivew重复

        static NSString *CellIdentifier =@"Cell";

        //定义cell的复用性当处理大量数据时减少内存开销

        UITableViewCell *cell = [tableview dequeueReusableCellWithIdentifier:CellIdentifier];

        

        if (cell ==nil)

        {

            //        cell = [[UITableViewCell alloc]initWithStyle UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

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

            

            cell.showsReorderControl =YES;  //我们添加一个重新排序控件

            

            if (indexPath.section == 0)

            {

                cell.imageView.image = [arrayImage objectAtIndex:[indexPath row]];

            }

            else

            {

                cell.imageView.image = [arrayImage1 objectAtIndex:[indexPath row]];

            }

            /*去掉方框 ,或者把view 换成imageview */

            UIView *backView = [[UIView alloc]init];

            [cell setBackgroundView:backView];

            cell.backgroundColor = [UIColor clearColor];

            

            cell.detailTextLabel.text = [array1 objectAtIndex:[indexPath row]];

            

            cell.textLabel.text  =  [array1 objectAtIndex:[indexPath row]];

            

            

        }

        

        

        // 设置字体大小

        cell.textLabel.font = [UIFont systemFontOfSize:15];

        

        

        /* 问题三 如何改变字体的颜色?

         解决方案:

         设置字体颜色*/

        cell.textLabel.textColor = [UIColor redColor];

        /* 问题三 如何改变字体的靠左对齐还是右还是中?

         解决方案:

         设置字体对齐方式*/

        

        cell.textLabel.textAlignment = NSTextAlignmentCenter;

        //设置文字的label的坐标

        cell.textLabel.frame = cell.frame;

        

        //设置tag值

        //    cell.textLabel.tag =20;

        

        /*  //cell的样式1:右侧添加箭头,表示点击cell 可以pus 到下个viewcontrol

         cell.accessoryType =    UITableViewCellAccessoryDisclosureIndicator;

         */

        

         //cell的样式2:右侧添加箭头,和一个info按钮,系统自己定义的button

         // 该样式会调用accessoryButtonTappedForRowWithIndexPath方法

         

         cell.accessoryType =  UITableViewCellAccessoryDetailDisclosureButton;

        

        

        /*

         //cell的样式3:这个是选择数据时候 告诉我们选择了哪一行,会调用didSelectRowAtIndexPath方法

         

         cell.accessoryType = UITableViewCellAccessoryCheckmark;

         NSUInteger row = [indexPath row];

         NSUInteger oldRow = [lastpath row];

         //如何点击当前的cell 最右边就会出现一个对号 ,在点击其他的cell 对号显示当前,上一个小时

         cell.accessoryType =  (row==oldRow &&lastpath != nil)?UITableViewCellAccessoryCheckmark:UITableViewCellAccessoryNone;

         */

      /*

        //cell的样式4:自定义右侧的butten

        mybutton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

        mybutton.frame = CGRectMake(0, 0, 100, 25);

        [mybutton setTitle:@"myButton" forState:UIControlStateNormal];

        [mybutton setBackgroundImage:[UIImage imageNamed:@"message"] forState:UIControlStateNormal];

        [mybutton addTarget:self action:@selector(myBtnClick:event:) forControlEvents:UIControlEventTouchUpInside];

        cell.accessoryView = mybutton;

        

        */

        

        

        

        

        return cell;

    }

    /**

     *explain:myBtnClick

     */

    -(void)myBtnClick:(id)sender event:(id)event

    {

        NSSet *touches = [event allTouches];   // 把触摸的事件放到集合里

        

        UITouch *touch = [touches anyObject];   //把事件放到触摸的对象了

        

        CGPoint currentTouchPosition = [touch locationInView:self.tableview]; //把触发的这个点转成二位坐标

        

        NSIndexPath *indexPath = [self.tableview indexPathForRowAtPoint:currentTouchPosition]; //匹配坐标点

        if(indexPath !=nil)

        {

            [self tableView:self.tableview accessoryButtonTappedForRowWithIndexPath:indexPath];

        }

        

        

    }

    /**

     *explain:添加响应事件

     */

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

    {

        /*   //这个表示点击选中的那个cell上的数据会弹出警告框

         NSString *titileString = [array objectAtIndex:[indexPath row]];

         //

         UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示"message:titileString delegate:self cancelButtonTitle:@"OK"otherButtonTitles:nil];

         [alert show];

         */

        

        

        //点击选中的那个cell会给该行cell打勾

        NSInteger newRow = [indexPath row];

        

       

             NSInteger oldRow = (lastpath != nil) ? [lastpath row] : -1;

        if (newRow != oldRow) {

            UITableViewCell *newCell = [tableView cellForRowAtIndexPath:

                                        indexPath];

            newCell.accessoryType = UITableViewCellAccessoryCheckmark;

            

            UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:

                                        lastpath];

            oldCell.accessoryType = UITableViewCellAccessoryNone;

            

            lastpath = indexPath;

        }

        // 取消选择(打勾)状态

        [tableView deselectRowAtIndexPath:indexPath animated:YES];

    }

    /**

     *explain:当cell.accessoryType =  UITableViewCellAccessoryDetailDisclosureButton;时调用

     */

    -(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath

    {

        NSString *titileString = [NSString stringWithFormat:@"你点击了按钮%@",[array1 objectAtIndex:[indexPath row]]];

        UIAlertView *alert = [[ UIAlertView alloc]initWithTitle:@"提示" message:titileString delegate:self    cancelButtonTitle:@"OK"otherButtonTitles: nil];

        [alert show];

    }

    /*设置标题头的宽度*/

    -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

    {

        return 20;

    }

    /*设置标题尾的宽度*/

    -(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section

    {

        return 20;

    }

    /*设置标题头的名称*/

    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

    {

        if (section == 0) {

            return @"我是头一";

        }

        else{

            UILabel *label2=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 320, 60)];

            

            label2.text=@"我是程序员";

            

            label2.backgroundColor =[UIColor blueColor];

            

            return label2.text;

        }

    }

    /*设置标题脚的名称*/

    -(NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section

    {

        if (section == 0)

        {

            return @"我是脚一";

        }

        else

        {

            UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

            [button setTitle:@"我是button 2" forState:UIControlStateNormal ];

            return button.titleLabel.text;

        }

    }

    /*设置cell 的宽度 */

    -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

    {

        

        return 50;

        

    }

    /**

     *explain:我想把第一个cell显示的数据 向后缩进10个像素其他的cell不变怎么办呢

     */

    -(NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath

    {

        //让第一行缩进10个像素,其他的cell不变

        if (indexPath.row ==0) {

            return 10;

        }

        return 0;

    }

    /**

     *explain: 屏蔽指定的cell 的触发事件(对自定义按钮无效,针对系统自带),会用到这个函数

     */

    -(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

    {

        

        //我让第一个cell 点击的时候没有反应

        if (indexPath.row ==0) {

            return nil;

        }

        return indexPath;

    }

    /**

     *explain:允许Menu菜单(给 tableview 加个长按快捷菜单)

     */

    -(BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath

    {

        return   YES;

    }

    //每个cell都可以点击出现Menu菜单

    -(BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender

    {

        

        //1只显示 copy,不显示其他

        

        /*   if (action == @selector(cut)){

         return NO;

         }  else if(action == @selector(copy:)){

         return YES;

         }

         

         else if(action == @selector(paste:)){

         return NO;

         }

         

         else if(action == @selector(select:)){

         return NO;

         }

         else if(action == @selector(selectAll:)){

         return NO;

         

         }    else  {

         return [super canPerformAction:action withSender:sender];

         }

         */

        // 2直接返回yes,表示全部显示

        return YES;

    }

    -(void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender

    {

        

        if (action ==@selector(copy:)) {

            

            

            //复制到剪切板

            NSString *str=[array1 objectAtIndex:[indexPath row]];

            [[UIPasteboard generalPasteboard] setPersistent:YES];

            [[UIPasteboard generalPasteboard] setValue:str forPasteboardType:[UIPasteboardTypeListString objectAtIndex:0]];

            

        }

        

        if (action ==@selector(cut:)) {

            

            //复制到剪切板

            NSString *str=[array1 objectAtIndex:[indexPath row]];

            [[UIPasteboard generalPasteboard] setPersistent:YES];

            [[UIPasteboard generalPasteboard] setValue:str forPasteboardType:[UIPasteboardTypeListString objectAtIndex:0]];

            //剪切完成以后清空

            [_arrayValue  replaceObjectAtIndex:indexPath.row withObject:@""];

            

            //刷新cell

            [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]withRowAnimation:UITableViewRowAnimationNone];

            

        }

        

        if (action ==@selector(paste:)) {

            NSString *copystr=[array1 objectAtIndex:[indexPath row]];

            

            NSString *pasteString = [UIPasteboard  generalPasteboard].string;

            

            NSLog(@"pasteString:%@",pasteString);

            

            NSString *tmpString = [NSString  stringWithFormat:@"%@%@",copystr,pasteString];

            NSLog(@"tmpString:%@",tmpString);

    #warning <#message#>

            [_arrayValue replaceObjectAtIndex:[indexPath row] withObject:tmpString];

            //       [array se]

            

            [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]withRowAnimation:UITableViewRowAnimationNone];

            

        }

        

        

    }

    /**

     *explain:给 tableview 添加索引

     */

    -(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView

    {

        

        return array1;

    }

  • 相关阅读:
    eclipse版本、代号
    eclipse中jdk及编译器版本问题
    改变cmd命令行颜色
    mysql-installer-community-8.0.12.0的安装
    算法简介
    Java--将数据以文本形式导出
    安装MySQL
    网络配置
    电脑拷软件到其他设备
    探针设备
  • 原文地址:https://www.cnblogs.com/niexiaobo/p/4446498.html
Copyright © 2011-2022 走看看