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;

    }

  • 相关阅读:
    Begin Example with Override Encoded SOAP XML Serialization
    State Machine Terminology
    How to: Specify an Alternate Element Name for an XML Stream
    How to: Publish Metadata for a WCF Service.(What is the Metadata Exchange Endpoint purpose.)
    Beginning Guide With Controlling XML Serialization Using Attributes(XmlSerializaiton of Array)
    Workflow 4.0 Hosting Extensions
    What can we do in the CacheMetaData Method of Activity
    How and Why to use the System.servicemodel.MessageParameterAttribute in WCF
    How to: Begin Sample with Serialization and Deserialization an Object
    A Test WCF Service without anything of config.
  • 原文地址:https://www.cnblogs.com/niexiaobo/p/4446498.html
Copyright © 2011-2022 走看看