• iOS Swipe Tableviewcell(左右滑动出现按钮)


    1.背景                                                                      

         看到QQ的左右滑动Tableviewcell时可以出现多个菜单,觉得很高大上,因为没这种需求,

    也只是需要一个删除按钮,这个系统已经帮我们实现了,只需要实现几个代理就可以,做出左划

    出现删除按钮,这个我就不再这里说了,Google上你应该很容易实现,这里要讲的是如何实现

    多个按钮的左右滑动的实现。可以获取点击的是哪个按钮

    2.效果图

        

    左右侧可以分开设置,即可以同时为图片,也可以一边图片一边文字。

    3.实现原理                                                                      

      在cell里面按钮和手势,根据手势来控制视图的移动和显示。

    4.自定义cell的核心代码                                                      

    .h文件

    #import <UIKit/UIKit.h>
    #import "menuview.h"
    
    typedef enum {
        CellStateLeft,
        CellStateRight,
        CellStateCenter,
        
       
    } CellState;
    
    
    @protocol MyTableViewCellDelegate <NSObject>
    - (void) btnMenuClick:(NSInteger)index isRightMenu:(NSInteger) isright;
    @end
    
    @interface myTableViewCell : UITableViewCell<UIGestureRecognizerDelegate,MenuviewDelegate>
    {
        CellState state;
    }
    @property (nonatomic,strong) id<MyTableViewCellDelegate> myTableViewCellDelegate;
    
    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier;
    - (void) initLeftMenu:(NSArray *) btnLeft bagcolor:(NSArray *) leftCol (NSInteger)leftWid height:(NSInteger) righthig isText:(BOOL) flag;
    - (void) initRightMenu:(NSArray *) btnRight bagcolor:(NSArray *) rightCol (NSInteger)rightWid height:(NSInteger) righthig isText:(BOOL) flag;
    
    @end
    View Code

    .m文件

    //
    //  myTableViewCell.m
    //  Delecttable
    //
    //  Created by apple on 14/12/12.
    //  Copyright (c) 2014年 Reasonable. All rights reserved.
    //
    
    #import "myTableViewCell.h"
    
    
    
    
    @implementation myTableViewCell
    {
        NSArray * rightconn;
        NSArray * rightcolor;
        NSInteger  rightwidth;
       
        BOOL rightIsText;
        BOOL hasRightMenu;
    
        NSArray * leftconn;
        NSArray * leftcolor;
        NSInteger  leftwidth;
        BOOL leftIsText;
        BOOL hasLeftMenu;
        
        menuview * leftview;
        menuview * rightView;
        
        NSInteger  height;
    
    }
    - (void) initSubControl
    {
    
    
    
    }
    
    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
        if (self) {
            hasRightMenu=NO;
            hasLeftMenu=NO;
            state=CellStateCenter;
            [self initControl];
        }
        
        return self;
    }
    - (void) initRightMenu:(NSArray *) btnRight bagcolor:(NSArray *) rightCol (NSInteger)rightWid height:(NSInteger) righthig isText:(BOOL) flag
    {
        if ((btnRight.count>0 && btnRight.count==rightCol.count && flag) || ( btnRight.count>0 &&!flag)) {
            rightconn=btnRight;
            rightcolor=rightCol;
            rightwidth=[self GetMenuWidth:rightWid isRight:YES];
            rightIsText=flag;
            state=CellStateCenter;
            hasRightMenu=YES;
            height=righthig;
             [self initControl];
        }
    }
    - (void) initLeftMenu:(NSArray *) btnLeft bagcolor:(NSArray *) leftCol (NSInteger)leftWid height:(NSInteger) righthig isText:(BOOL) flag
    {
        if ((btnLeft.count>0 && btnLeft.count==leftCol.count && flag) || ( btnLeft.count>0 &&!flag)) {
            leftconn=btnLeft;
            leftcolor=leftCol;
            leftwidth=[self GetMenuWidth:leftWid isRight:YES];
            leftIsText=flag;
            state=CellStateCenter;
             hasLeftMenu=YES;
               height=righthig;
            [self initControl];
        }
    }
    
    
    -(NSInteger) GetMenuWidth:(NSInteger)fucwidth isRight:(BOOL) flag
    {
        NSInteger totalwidth=flag?rightconn.count*rightleftconn.count * leftwidth;
        NSInteger muennumber=flag?rightconn.count:leftconn.count;
        if (totalwidth>self.frame.size.width) {
            return (self.frame.size.width/muennumber);
        }else{
            return fucwidth;
        }
      
    }
    - (void) initControl
    {
        if (hasRightMenu) {
            rightView=[[menuview alloc]initWithFrame:CGRectMake(self.frame.size.width-(rightwidth*rightconn.count), 0, rightwidth*rightconn.count,height)];
            [rightView initMenu:rightconn bagcolor:rightcolor rightwidth isText:rightIsText];
            rightView.menuviewDelegate=self;
            rightView.hidden=YES;
            [self addSubview:rightView];
            
        }
        if (hasLeftMenu) {
            leftview=[[menuview alloc]initWithFrame:CGRectMake(0, 0, leftwidth*leftconn.count,height)];
            [leftview initMenu:leftconn bagcolor:leftcolor leftwidth isText:leftIsText];
            leftview.menuviewDelegate=self;
            leftview.hidden=YES;
            [self addSubview:leftview];
        }
       self.userInteractionEnabled=YES;
       self.contentView.userInteractionEnabled=YES;
        self.contentView.backgroundColor=[UIColor whiteColor];
        
        UISwipeGestureRecognizer * sc1=[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
        sc1.delegate=self;
        [sc1 setDirection:UISwipeGestureRecognizerDirectionLeft];
        UISwipeGestureRecognizer * sc2=[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
        sc2.delegate=self;
        [sc2 setDirection:UISwipeGestureRecognizerDirectionRight];
        [self.contentView addGestureRecognizer:sc1];
        [self.contentView addGestureRecognizer:sc2];
        [self bringSubviewToFront:self.contentView];
        
    }
    
    - (void) btnClick:(NSInteger)index
    {
        [self.myTableViewCellDelegate  btnMenuClick:index isRightMenu:state];
     
    }
    
    -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    {
        // 判断是不是UIButton的类
        if ([touch.view isKindOfClass:[UIButton class]])
        {
            return NO;
        }
        else
        {
            return YES;
        }
    }
    
    
    -(void)handleSwipe:(UISwipeGestureRecognizer *)gesture {
       
    
           
            switch (gesture.direction) {
                case UISwipeGestureRecognizerDirectionUp:
                    NSLog(@"%@",@"up");
                    break;
                    
                case UISwipeGestureRecognizerDirectionDown:
                    
                    
                    break;
                    
                case UISwipeGestureRecognizerDirectionLeft:
                {
                    if (state==CellStateCenter) {
                    
                        rightView.hidden=NO;
                        CGRect  rct=CGRectMake( self.contentView.frame.origin.x ,  self.contentView.frame.origin.y,
                                               self.contentView.frame.size.width, self.contentView.frame.size.height);
                        rct.origin.x=rct.origin.x-rightwidth*[rightconn count];
                        self.contentView.frame=rct;
                        state=CellStateRight;
                    }
                    
                    
                    if (state==CellStateLeft) {
                        leftview.hidden=YES;
                        CGRect  rct=CGRectMake( self.contentView.frame.origin.x ,  self.contentView.frame.origin.y,
                                               self.contentView.frame.size.width, self.contentView.frame.size.height);
                        rct.origin.x=rct.origin.x-leftwidth*[leftconn count];
                        self.contentView.frame=rct;
                        state=CellStateCenter;
                    }
                    
                    
                }
                    break;
                case UISwipeGestureRecognizerDirectionRight:
                {
                    
                    if (state==CellStateCenter) {
                        leftview.hidden=NO;
                        CGRect  rct=CGRectMake( self.contentView.frame.origin.x ,  self.contentView.frame.origin.y,
                                               self.contentView.frame.size.width, self.contentView.frame.size.height);
                        rct.origin.x=rct.origin.x+leftwidth*[leftconn count];
                        self.contentView.frame=rct;
                        state=CellStateLeft;
                    }
                    
                    if (state==CellStateRight) {
                        rightView.hidden=YES;
                       CGRect  rct=CGRectMake( self.contentView.frame.origin.x ,  self.contentView.frame.origin.y,
                                           self.contentView.frame.size.width, self.contentView.frame.size.height);
                      rct.origin.x=rct.origin.x+rightwidth*[rightconn count];
                       self.contentView.frame=rct;
                        state=CellStateCenter;
                    }
                   
                }
                    break;
                    
                default:
                    break;
            }
    
        
    }
    - (void) RightViewSelectindex:(UIButton *) btn
    {
        NSLog(@"%ld",btn.tag);
    }
    - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
        [super setSelected:selected animated:animated];
    
        // Configure the view for the selected state
    }
    
    @end
    View Code

    5.说明                                                                            

      开发环境是Xcode 6.1 SDK8.1 未测试其他版本的效果,如果需要测试dome留下邮箱,我会发给你。

    欢迎转载。

  • 相关阅读:
    Android 6.0以上动态获取权限
    大学实验3指导:利用单链表实现A-B
    大学课程实验2指导-二叉树的建立与遍历
    大学实验1 哈夫曼编码
    大学java教案之MySQL安装图解
    DrawableAnimation小练习
    Android学习第7天
    Android学习第6天
    There's no Qt version assigned to this project for platform Win32
    OpenBCI 开发环境配置
  • 原文地址:https://www.cnblogs.com/try-wyh/p/4161500.html
Copyright © 2020-2023  润新知