swift 拖动按钮_Swift - 单元格滑动按钮库SwipeCellKit使用详解1(基本用法)

在之前的两篇文章中我分别介绍了如何使用 iOS8和 iOS11提供的相关代理方法,来实现 tableView单元格滑动事件按钮:

但它们局限性还是比较大的,前者只能实现尾部按钮,且按钮只能使用文字无法使用图片。而后者对系统版本又要求比较高。

下面介绍一个好用的第三方滑动单元格组件:SwipeCellKit。不仅使用方便,而且功能强大,可以自由设置各种样式和动画效果。只要系统版本在iOS9.0以上就可以使用。

一、基本介绍

使用 SwipeCellKit可以很方便地实现类似系统里邮件 App那样的滑动效果。

1,功能特点

支持左滑和右滑操作。

动作按钮支持纯文本、文本+图片以及纯图片样式。

支持触觉反馈

可自定义转场效果,比如 Border、Drag以及 Reveal

可自定义按钮滑动时的行为

支持滑动超过一定范围时的自动展开动画

可自定义自动展开动画

2,安装配置

(2)将下载下来的源码包中 SwipeCellKit.xcodeproj拖拽至你的工程中

(3)工程 -> General-> Embedded Binaries 项,把 SwipeCellKit.framework添加进来。

(4)最后,在需要使用 SwipeCellKit的地方 import进来就可以了

import SwipeCellKit

二、使用样例

1,纯文字的滑动按钮

(1)效果图

我们在 tableView上向左滑动某个 cell时,其右侧会出现“旗标”“删除”这两个按钮选项。当点击“旗标”按钮时,页面上会弹出相关的操作信息。

    

    

而最右侧的“删除”按钮除了点击会触发外,直接往左一滑到底也会触发,触发后会将当前行数据给删除。

    

而右滑单元格时左侧会出现“未读”按钮,点击后同样在页面上弹出相关的操作信息。

    

(2)样例代码

import UIKit

import SwipeCellKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource,

SwipeTableViewCellDelegate{

var tableView:UITableView?

var items = ["这个是条目1","这个是条目2","这个是条目3","这个是条目4",

"这个是条目5","这个是条目6","这个是条目7","这个是条目8",]

override func viewDidLoad() {

super.viewDidLoad()

//创建表格视图

self.tableView = UITableView(frame:self.view.frame, style:.plain)

self.tableView!.delegate = self

self.tableView!.dataSource = self

//创建一个重用的单元格

self.tableView!.register(SwipeTableViewCell.self,

forCellReuseIdentifier: "SwiftCell")

self.view.addSubview(self.tableView!)

}

//在本例中,有1个分区

func numberOfSections(in tableView: UITableView) -> Int {

return 1

}

//返回表格行数(也就是返回控件数)

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

return items.count

}

//创建各单元显示内容(创建参数indexPath指定的单元)

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)

-> UITableViewCell {

//为了提供表格显示性能,已创建完成的单元需重复使用

let identify:String = "SwiftCell"

//同一形式的单元格重复使用,在声明时已注册

let cell = tableView.dequeueReusableCell(

withIdentifier: identify, for: indexPath) as! SwipeTableViewCell

cell.delegate = self

cell.textLabel?.text = items[indexPath.row]

return cell

}

//自定义滑动按钮

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath,

for orientation: SwipeActionsOrientation) -> [SwipeAction]? {

//分别返回左侧、右侧的按钮

if orientation == .left {

//创建“未读”事件按钮

let unreadAction = SwipeAction(style: .default, title: "未读") {

action, indexPath in

UIAlertController.showAlert(message: "点击了“未读”按钮")

}

unreadAction.backgroundColor = UIColor(red: 52/255, green: 120/255,

blue: 246/255, alpha: 1)

//返回左侧事件按钮

return [unreadAction]

} else{

//创建“旗标”事件按钮

let favoriteAction = SwipeAction(style: .default, title: "旗标") {

action, indexPath in

UIAlertController.showAlert(message: "点击了“旗标”按钮")

}

favoriteAction.backgroundColor = .orange

//创建“删除”事件按钮

let deleteAction = SwipeAction(style: .destructive, title: "删除") {

action, indexPath in

//将对应条目的数据删除

self.items.remove(at: indexPath.row)

tableView.reloadData()

}

//返回右侧事件按钮

return [deleteAction, favoriteAction]

}

}

//自定义滑动行为(可选)

func tableView(_ tableView: UITableView,

editActionsOptionsForRowAt indexPath: IndexPath,

for orientation: SwipeActionsOrientation) -> SwipeTableOptions {

var options = SwipeTableOptions()

options.transitionStyle = .border //变化样式(使用默认的不变)

options.expansionStyle = .selection //展开样式(默认为.none)

return options

}

override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

}

}

//扩展UIAlertController

extension UIAlertController {

//在指定视图控制器上弹出普通消息提示框

static func showAlert(message: String, in viewController: UIViewController) {

let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)

alert.addAction(UIAlertAction(title: "确定", style: .cancel))

viewController.present(alert, animated: true)

}

//在根视图控制器上弹出普通消息提示框

static func showAlert(message: String) {

if let vc = UIApplication.shared.keyWindow?.rootViewController {

showAlert(message: message, in: vc)

}

}

}

2,修改文字的颜色和字体

通过 SwipeAction的 textColor和 font属性,我们可以分别修改按钮上文字的颜色和字体大小。

//创建“未读”事件按钮

let unreadAction = SwipeAction(style: .default, title: "未读") {

action, indexPath in

UIAlertController.showAlert(message: "点击了“未读”按钮")

}

//设置按钮的文字颜色和字体大小

unreadAction.textColor = .green

unreadAction.font = .systemFont(ofSize: 20)

unreadAction.backgroundColor = UIColor(red: 52/255, green: 120/255, blue: 246/255, alpha: 1)

3,带图标的滑动按钮

(1)如果想要实现想邮件 App那样“图标 + 文字”的按钮,我们只需要给对应的 SwipeAction设置个 image就可以了。

//创建“未读”事件按钮

let unreadAction = SwipeAction(style: .default, title: "未读") { action, indexPath in

UIAlertController.showAlert(message: "点击了“未读”按钮")

}

//设置按钮图标

unreadAction.image = UIImage(named: "unread")

unreadAction.backgroundColor = UIColor(red: 52/255, green: 120/255, blue: 246/255, alpha: 1)

(2)如果按钮只想要图标,不需要文字标题的话,把 title设置为 nil即可。

//创建“未读”事件按钮

let unreadAction = SwipeAction(style: .default, title: nil) { action, indexPath in

UIAlertController.showAlert(message: "点击了“未读”按钮")

}

//设置按钮图标

unreadAction.image = UIImage(named: "unread")

unreadAction.backgroundColor = UIColor(red: 52/255, green: 120/255, blue: 246/255, alpha: 1)

4,自动展开事件按钮

(1)上面的样例中,不管是左侧还是右侧的事件按钮,都是通过滑动手势来展开的。有时我们可能想通过程序来自动触发这个行为,那么只要调用 SwipeTableViewCell 的 showSwipe 方法即可。

(2)下面是一个简单的样例,当我们点击某个 cell 时,这个 cell 右侧的功能按钮便会自动出现。

//点击某个单元格

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

let cell = tableView.cellForRow(at: indexPath) as! SwipeTableViewCell

//自动展开该单元格右侧的事件按钮

cell.showSwipe(orientation: .right)

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库优化(五)

MySQL配置优化 通过配置my.cnf使数据库达到优化的目的。 1、innodb的缓冲池配置 innodb_buffer_pool_size  通常配置服务器内存的60%~70% 2、innodb log缓存配置 innodb_log_buffer_size  这个不宜配置太大,因为日志缓存每秒刷新一次 3、配置缓冲池个数 innodb_…

qt用c语言编程 pdf下载文件,Qt 使用Poppler实现pdf阅读器的示例代码

开发环境 Qt5.5.1、Qt Creator 3.5.1Qt实现pdf阅读器和MFC实现pdf阅读器,其实原理都是差不多的。注意:这个是MinGW版本的Qt,也就是运行在GCC环境下的库,里面只包含 *.dll 和 *.a 。如果是Vistual Studio版本的Qt ,那么…

redis 分布式锁 看门狗_分布式锁Redisson的使用,看门狗机制

Redisson简介Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingD…

BZOJ 1018: [SHOI2008]堵塞的交通traffic

二次联通门 : BZOJ 1018: [SHOI2008]堵塞的交通traffic /*BZOJ 1018: [SHOI2008]堵塞的交通traffic麻麻这题玩我这题简直消磨人的意志写了一天了写一段玩一段直接写不下去什么时候恢复一下心情再写*/ #include <cstdio> #include <iostream>#define rg register in…

c语言二叉树的头文件叫什么,西安交大朱站立数据结构——使用C语言》头文件系列——二叉树.doc...

西安交大朱站立数据结构——使用C语言》头文件系列——二叉树本文为二叉链存储结构的二叉树操作实现&#xff0c;实现了二叉树的定义、插入数据、删除数据、撤销以及二叉树的打印、前序遍历、中序遍历、后序遍历等。本项目工程包含2个头文件(BiTree.h、BiTreeTraverse.h)和一个…

rfcv函数实现_OpenSSL AES_ctr128_encrypt()作为伪随机函数在RFC3711(SRTP)

128位的主密钥&#xff1a;E1F97A0D3E018BE0D64FA32C06DE4139112位输入矢量&#xff1a;0EC675AD498AFEEBB6960B3AABE616位计数器&#xff1a;0000喂奶时的级联将112位输入向量和16位计数器转换为AES_ctr128_encrypt()我是不是得到预期的输出附录B.3的RFC3711列出了。(根据RFC3…

linux/npm/git的简单操作

下面是命令操作的详细步骤&#xff0c;每一步都是相连接的&#xff1b;对于git的相关命令&#xff0c;包括了团队开发时候如何操作&#xff0c;以及QA如何测试的&#xff1b;都挺详细的&#xff0c;可能有注释的理解不太正确&#xff0c;可以进行补充&#xff1b; 也可以看着之…

C语言工厂方法模式,工厂函数模式 (C语言实现)

工厂模式属于创建型模式&#xff0c;大致可以分为三类&#xff0c;简单工厂模式、工厂方法模式、抽象工厂模式。二. 工厂方法模式所谓工厂方法模式&#xff0c;是指定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子…

c语言代码 linux 关机_android linux 关机流程

To power off an Android phone, keep pressing power bottom then shutdown menu is appeard. Then choose ‘Power OFF’ to power off actually.I looked for the source code to see how to do these sequence.(Japanese version of this page)Showing shutdown menuHere i…

光绘文件 c语言 解析,AltiumDesigner输出光绘文件

1、钻孔信息生成设置打开PCB文件&#xff0c;放置钻孔位图符号对应的孔大小的列表&#xff1a;切换到DrillDrawing层放置字符串&#xff0c;Place->string(PS)&#xff0c;此时按Tab键&#xff0c;在出现的Text文本框中点击下拉箭头&#xff0c;选择.Legend&#xff0c;OK。…

logback日志pattern_Logback pattern transactionid 中如何自定义灵活的日志过滤规则

当我们需要对日志的打印要做一些范围的控制的时候&#xff0c;通常都是通过为各个Appender设置不同的Filter配置来实现。在Logback中自带了两个过滤器实现&#xff1a;ch.qos.logback.classic.filter.LevelFilter和ch.qos.logback.classic.filter.ThresholdFilter&#xff0c;用…

曼哈顿距离最小生成树与莫队算法(总结)

曼哈顿距离最小生成树与莫队算法&#xff08;总结&#xff09; 1 曼哈顿距离最小生成树 曼哈顿距离最小生成树问题可以简述如下&#xff1a; 给定二维平面上的N个点&#xff0c;在两点之间连边的代价为其曼哈顿距离&#xff0c;求使所有点连通的最小代价。 朴素的算法可以用O(N…

功能引导 android,Flutter实现App功能引导页

App功能介绍页&#xff0c;主要是由介绍app功能的几张图片和当前页指示符组成&#xff0c;如下效果我们来一步一步实现上面的界面,左右滑动切换显示功能页,这个可以通过PageView来实现,底部的指示符半透明覆盖在PageView上,开发过Android同学知道可以用Framelayout布局来实现&a…

vue项目调用jssip_JsSIP和FreeSWITCH整合

写在前面&#xff1a;FreeSWITCH作为服务器&#xff0c;通过SIP协议&#xff0c;Web端使用jssipwebrtc和其他软电话进行通信一、先配置FreeSWITCH(用的版本1.6.20)的配置&#xff1a;1 、修改vars.xml文件&#xff0c;找到下面字段&#xff0c;并设置2、修改 autoload_configs/…

ios禁止页面下拉

document.querySelector(body).addEventListener(touchmove, function(e) { e.preventDefault();})此类事件是手机touchmove默认事件行为&#xff0c;可以通过js代码禁止默认事件&#xff1a;转载于:https://www.cnblogs.com/zhouyx/p/8145182.html

android中虚拟程序停止,为什么我的在虚拟机运行后出现应用程序停止运行

源自&#xff1a;9-2 使用ToggleButton按钮实现开关效果为什么我的在虚拟机运行后出现应用程序停止运行package com.example.sss;import com.example.android4_0.R;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuIt…

android layout(l, t, r, b);,服务器里的a,t,l,r,b是什么意思? Android编程中关于layout(l,t,r,b)函数的问题...

导航&#xff1a;网站首页 >服务器里的a,t,l,r,b是什么意思? Android编程中关于layout(l,t,r,b)函数的问题服务器里的a,t,l,r,b是什么意思? Android编程中关于layout(l,t,r,b)函数的问题相关问题:匿名网友:我们知道&#xff0c;屏幕的分辨率往往以“像素数 x 像素数”的格…

python里else中文意思_Python循环语句中else的用法总结

前言本文讨论Python的for…else和while…else等语法&#xff0c;这些是Python中最不常用、最为误解的语法特性之一。Python中的for、while等循环都有一个可选的else分支(类似if语句和try语句那样)&#xff0c;在循环迭代正常完成之后执行。换句话说&#xff0c;如果我们不是以除…

go语言 方法

go 语言中没有类&#xff0c;但是是有方法。 方法的定义&#xff1a; func (recevier type) methodName(参数列表)(返回值列表){ } type School struct {Name stringAddr string }func NewSchool(name, addr string) *School {return &School {Name:name,Addr:addr,} }fun…

android 获取加速度传感器值,Android开发获取传感器数据的方法示例【加速度传感器,磁场传感器,光线传感器,方向传感器】...

本文实例讲述了Android开发获取传感器数据的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;package mobile.android.sensor;import java.util.List;import android.app.Activity;import android.hardware.Sensor;import android.hardware.SensorEvent;import and…