1. Background
See QQ left and right sliding Tableviewcell can appear multiple menus, feel very tall on, because there is no such demand,
Also just need a delete button, this system has helped us to achieve, only need to implement a few agents can, make left row
There is a delete button, this I will not say here, Google you should be easy to implement, here is to talk about how to achieve
The implementation of the left and right swipe of multiple buttons. you can get which button is clicked .
2.
The left and right side can be set apart, that is, the picture can be at the same time, the picture side text.
3. Principle of implementation
Inside the cell are buttons and gestures that control the movement and display of the view based on gestures.
4. Customizing the core code of the cell
. h file
#import<UIKit/UIKit.h>#import "menuview.h"typedefenum{cellstateleft, Cellstateright, Cellstatecenter,} cellstate;@protocolMytableviewcelldelegate <nsobject>-(void) Btnmenuclick: (nsinteger) Index Isrightmenu: (Nsinteger) isright;@end@interfaceMytableviewcell: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 width: (nsinteger) Leftwid height: (nsinteger) Righthig istext: (BOOL) flag;- (void) Initrightmenu: (Nsarray *) btnright Bagcolor: (Nsarray *) Rightcol width: (nsinteger) Rightwid height: (nsinteger) Righthig istext: (BOOL) flag;@end
View Code
. m file
////MYTABLEVIEWCELL.M//delecttable////Created by Apple on 14/12/12.//Copyright (c) 2014 reasonable. All rights reserved.//#import "myTableViewCell.h"@implementationmytableviewcell{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]; } returnSelf ;}- (void) Initrightmenu: (Nsarray *) btnright Bagcolor: (Nsarray *) Rightcol width: (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 width: (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*rightwidth:leftconn.count *Leftwidth; Nsinteger Muennumber=flag?Rightconn.count:leftconn.count; if(totalwidth>self.frame.size.width) {return(self.frame.size.width/muennumber); }Else{ returnFucwidth; } }- (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 width: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 width: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{//Judging is not UIButton class if([Touch.view Iskindofclass:[uibuttonclass]]) { returnNO; } Else { returnYES; }}-(void) Handleswipe: (Uiswipegesturerecognizer *) Gesture {Switch(gesture.direction) { CaseUiswipegesturerecognizerdirectionup:nslog (@"%@",@" up"); Break; CaseUiswipegesturerecognizerdirectiondown: Break; Caseuiswipegesturerecognizerdirectionleft: {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; Caseuiswipegesturerecognizerdirectionright: {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. Description
The development environment is the effect of Xcode 6.1 SDK8.1 not testing other versions, and if you need to test dome leave the mailbox, I'll send it to you.
Welcome reprint.
IOS Swipe Tableviewcell (left and right swipe to appear button)