首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在UIButton上按下双按钮取消操作?

在UIButton上实现双按钮取消操作,可以通过以下几个步骤:

  1. 首先,在你的UIViewController或者UIView中,创建两个UIButton实例,并设置它们的标题和样式。
代码语言:swift
复制
let button1 = UIButton(type: .system)
button1.setTitle("Button 1", for: .normal)
button1.frame = CGRect(x: 50, y: 100, width: 100, height: 50)

let button2 = UIButton(type: .system)
button2.setTitle("Button 2", for: .normal)
button2.frame = CGRect(x: 200, y: 100, width: 100, height: 50)
  1. 为两个UIButton添加点击事件,并在点击事件中实现双按钮取消操作的逻辑。
代码语言:swift
复制
button1.addTarget(self, action: #selector(button1Tapped), for: .touchUpInside)
button2.addTarget(self, action: #selector(button2Tapped), for: .touchUpInside)

var button1Timer: DispatchSourceTimer?
var button2Timer: DispatchSourceTimer?

@objc func button1Tapped() {
    if button1Timer == nil {
        let queue = DispatchQueue(label: "com.example.button1", attributes: .concurrent)
        button1Timer = DispatchSource.makeTimerSource(queue: queue)
        button1Timer?.schedule(deadline: .now() + 0.5, repeating: 0.5)
        button1Timer?.setEventHandler { [weak self] in
            DispatchQueue.main.async {
                self?.button1.setTitle("Cancel", for: .normal)
            }
        }
        button1Timer?.resume()
    } else {
        button1Timer?.cancel()
        button1Timer = nil
        button1.setTitle("Button 1", for: .normal)
    }
}

@objc func button2Tapped() {
    if button2Timer == nil {
        let queue = DispatchQueue(label: "com.example.button2", attributes: .concurrent)
        button2Timer = DispatchSource.makeTimerSource(queue: queue)
        button2Timer?.schedule(deadline: .now() + 0.5, repeating: 0.5)
        button2Timer?.setEventHandler { [weak self] in
            DispatchQueue.main.async {
                self?.button2.setTitle("Cancel", for: .normal)
            }
        }
        button2Timer?.resume()
    } else {
        button2Timer?.cancel()
        button2Timer = nil
        button2.setTitle("Button 2", for: .normal)
    }
}
  1. 将两个UIButton添加到视图中。
代码语言:swift
复制
view.addSubview(button1)
view.addSubview(button2)

这样,当用户点击Button 1时,按钮的标题会在0.5秒后变为“Cancel”,再次点击会取消计时器并恢复原始标题。同样地,当用户点击Button 2时,按钮的标题会在0.5秒后变为“Cancel”,再次点击会取消计时器并恢复原始标题。

这个示例使用了DispatchSourceTimer来实现计时器功能,它是GCD(Grand Central Dispatch)提供的一种计时器实现方式。你可以根据需要选择其他计时器实现方式,例如使用Timer类或者NSTimer类。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

按钮与交互-使用按钮触发操作

主要故事板 我们在屏幕放置一些按钮。使用模板,主故事板附带一个ARSCNView,我们无法在其放置按钮。首先,删除ARSCNView并放置UIView。...取消选中Constrain到边距。在布局中,将ARSCNView放在View下方,否则按钮将不会显示。 ? 约束 IBAction为 现在我们有了按钮,我们需要给它们功能。...通过单击右上角带有圆圈的图标启用助理编辑器。您将看到我们同时拥有主故事板和代码。在swift文件中,您将看到一个与之前的ARSCNView链接的IBOutlet。...对于plusButtonTapped,声明一个常量,这是一个缩放操作,并将数量设置为2x,持续时间为2秒。让iPhoneXNode运行此操作。...diffuse.contents = UIImage(named: "art.scnassets/AR-Screen.png") } 结论 在本节中,我们学习了如何在Storyboard中放置按钮并约束它们

4.6K20
  • iOS 9人机界面指南(四):UI元素()- 腾讯ISUX

    4.3.2 添加联系人按钮 添加联系人按钮让用户将现有联系人添加到文本框或者其它文字视图中。 ? API注释 想要了解如何在代码中定义添加联系人按钮,请参考UIButton....API注释 想要了解如何在代码中定义信息按钮,可以参考UIButton. iOS包含了两种信息按钮样式:适用于浅色内容的深色按钮,以及适用于深色内容的浅色按钮。...想要了解更多如何在代码中定义系统按钮,可以参考 UIButton....避免在文本中详细描述“该哪个按钮”而导致文本过长。理想情况,表意明确的警告文案和逻辑清晰的按钮文案已经足以让用户正确判断自己该哪个按钮了。...提示 一般来说,当警告框出现的时候,Home键将会从该app里切回主屏幕,此时Home键的效果类似于取消按钮——当用户回到app中的时候,警告框将消失,操作也不会被执行。

    13.2K30

    【 iOS 应用开发 】 UIKit 控件 ( UIView 属性 | storyboard 设置 | 模拟器 | 拖线关联 | tag | 软键盘操作 | 颜色值 | 代码生成控件 | 动画设置 )

    , 然后点击状态时, 大按钮显示另外一个背景图片; 3.上下左右按钮 : 点击四个按钮, 大按钮进行上下左右移动; 4.放大缩小按钮 : 点击放大, 大按钮放大, 点击缩小, 大按钮缩小; -...颜色板 可以选择任何颜色; 5.设置按钮点击状态 : 在 State Config 属性中可以配置 五种状态, 其中的 Highlighted 状态就是按钮的状态, 每个状态都可以设置一套单独的..., 将 Background 中设置对应的的图片, 文字设置成的文字; 7.Main.storyboard 中查看 Highlighted 状态的设置 : 我们设置了 Highlighted...: 在 Main.storyboard 中添加一个按钮, 修改按钮文字为 “代码生成UIView控件”, 进入辅助编辑器模式, control 键不放, 左键拖动按钮到 ViewController.m...- (IBAction)generateButton:(UIButton *)sender { //1.创建 UIButton 按钮, 创建按钮时需要制定按钮的 Type 类型, 一般情况使用

    4.9K30

    1.注册或登录页面设计:UILabel,UIButton,UITextField

    实现了键盘收回操作。 这里没有写对“用户名”进行特殊字符过滤的代码。 ?...confirmButton addTarget:self action:@selector(confirm:) forControlEvents:UIControlEventTouchUpInside];//button被又抬起后发生的事件...button1.adjustsImageWhenHighlighted = NO; /*跟上面的情况一样,默认情况,当按钮禁用的时候,图像会被画得深一点,设置NO可以取消设置*/...button1.adjustsImageWhenDisabled = NO; /* 下面的这个属性设置为yes的状态按钮会发光*/ button1.showsTouchWhenHighlighted...= YES; /* 给button添加事件,事件有很多种,我会单独开一篇博文介绍它们,下面这个时间的意思是 按钮,并且手指离开屏幕的时候触发这个事件

    2.4K50

    excel常用操作大全

    在释放鼠标按钮完成操作后,一个或多个选定的格单位将被拖放到一个新的位置。14.如何在屏幕扩大工作空间? 从“视图”菜单中,选择“全屏”命令。 15.如何使用快捷菜单?...方法是: 选择操作区域,在“格式”菜单中选择“自动套用格式”命令,从格式列表框中选择满意的格式样式,然后“确定”按钮。...要将格式化操作复制到数据的另一部分,请使用“格式化画笔”按钮。选择具有所需源格式的单元格,单击工具栏的“格式画笔”按钮,鼠标变成画笔形状,然后单击要格式化的单元格以复制格式。...19.如何在表单中添加斜线? 一般来说,我们习惯在表单使用斜线,但是工作表本身不提供这个功能。事实,我们可以使用绘图工具来实现: 点击“绘图”按钮,选择“直线”,鼠标将变成一个十字。...除了使用“窗口”\“展开窗口”命令外,取消拆分窗口还有一些快捷方式:将鼠标指针放在水平分割线或垂直分割线或拆分交点,双击鼠标取消拆分窗口。 30.如何展开工作簿?

    19.2K10

    【iOS 开发】基本 UI 控件详解 (UIButton | UITextField | UITextView | UISwitch)

    UIButton 就是这种控件; -- 静态控件 : 继承了 UIView 基类, 该类控件与用户之间不能交互, 之前使用的 UILabel 就是这种控件; -- 被动控件 : 该类控件可以接受用户操作...; -- 禁用 : UI 控件关闭后, 处于禁用状态; 禁用状态的控件不可操作, 禁用操作在 Interface Builder 取消 Enable 复选框; -- 选中 : 用于标识控件已启用 或...被选中, 选中状态可以不断持续, 高亮状态只在 才显示; (4) UI 控件状态 UI 控件状态 :  -- enabled : UIControl 控件是否可用; -- selected : 该属性判断该...-- 作用 : 控制按钮边界间距, 在按钮四周留出空白; -- 间距值 : 该属性需要设置 Top, Bottom, Left 和 Right 四个值代表 左 右 间距; 2....UITextView 虚拟键盘关闭 (1) 需求分析 UITextView 与 UITextField 中使用的虚拟键盘对比 :  -- UITextField 虚拟键盘 : 右下角的键是 Done, 这个键可以设置成关闭虚拟键盘

    6.8K20

    iOS学习——UIPickerView的实现年月选择器

    、确定按钮,蒙层等大框架的布局,然后是子类在基类的基础添加UIPickerView来实现选择器的基本功能以及数据加载和显示。...@property (nonatomic, strong) UIButton *leftBtn; // 右边确定按钮 @property (nonatomic, strong) UIButton *rightBtn...而对于弹出视图中的标题行(包含取消按钮、确定按钮和标题)、分割线和选择器的具体布局在这里就不进行展开了,很简单的部分,大家自行看一代码就OK了。   ...还有取消、确定按钮的点击事件也都在这里进行控制和实现,我们根据自己的需要进行这是就可以了,一般是在点击确定按钮的时候调用我们的BRDateResultBlock,实现日期选择完成的操作。...其中取消按钮就直接没有操作,dismiss当前界面,并注意要进行dealloc,创建的视图要清除,避免内存泄露。蒙层背景点击事件看需求,有的需要和取消一样的效果,有的可能就无效果,自己添加即可。

    4.3K130

    iOS从timer释放问题看内存管理

    :nil]; } -(void)dealloc{ [timer invalidate]; timer = nil; NSLog(@"dealloc"); } 当我们点击跳回按钮...在平常情况,一般我们都能给出正确的释放时机,而如果在写SDK这种就是需要控制器销毁时timer释放的需求时,由于SDK不能干预或是了解开发者会怎样操作,所以尽量自身把这些释放做好。...网上还有一些别的方法,本质也是这样的。...这些时候,只要在 调用dealloc 时判断,已经调用过 dispatch_suspend 则再调用 dispatch_resume后再cancel,然后再释放timer。...如果暂停后不进行重新启动 timer 的话,直接取消 timer会报错。一旦取消timer后就不能再重新运行 timer,否则就会崩溃,只能重建一个new timer。

    1.7K20

    iOS开发之微信聊天工具栏的封装

    之前已经把微信的视图结构简单的拖了一(iOS开发之微信山寨版),今天就开始给微信加上具体的实现功能,那么就先从微信的聊天界面开始吧。...3 @property (nonatomic, strong) UIButton *voiceChangeButton; 4 5 //发送语音的按钮 6 @property (nonatomic...录音时取消录音(删除录音文件)。主要是给录音按钮加了一个LongPress手势,根据手势的状态来做不同的事情。...5.点击最左边的按钮触发的事件(切换文本输入框和录音按钮),代码如下: 1 //切换声音按键和文字输入框 2 -(void)tapVoiceChangeButton:(UIButton *) sender...(在LongPress没有被触发时调用)代码如下: 1 //发送声音按钮回调的方法 2 -(void)tapSendVoiceButton:(UIButton *) sender 3 { 4 NSLog

    2.5K80

    Quartz2D复习(四) --- 图层CALayer和动画CAAnimation

    1、CALayer 1)、在ios中,能看得见摸得着的东西基本都是UIView, 比如按钮、文本标签、文本输入框、图标等,这些都是UIView 2)、UIView之所以能显示在屏幕,完全是因为它内部的一个图层...,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层,绘图完毕后,系统会将图层拷贝到屏幕,于是就完成了UIView的显示。...,不会阻塞主线程 3)、Core Animation是直接操作在CALayer的,并非UIView 4)、CAAnimation继承结构,紫色虚线表示继承自某类,红色虚线表示遵守某个协议 : ?...默认情况,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间 13)、转场动画 --- CATransition   CATransition是CAAnimation...: 取消抖动 159 UIButton *cancelDou = [UIButton buttonWithType:UIButtonTypeCustom]; 160 [cancelDou

    1.4K30

    iOS开发入门笔记

    运行刚下载的应用 点击Xcode左上角的Run按钮(或者同时Comman和R键),Xcode会编译源码并在模拟器中运行这个应用。 编译成功会在屏幕淡淡地显示“Build Succeeded”。...selector主要用来做两类事情: 绑定控件触发的动作 @implementation DemoViewController - (void)downButtonPressed:(id)sender {//响应“按钮事件...action: @selector(downButtonPressed:) forControlEvents: UIControlEventTouchUpInside];//当这个按钮时...,白苹果的触控板天然支持多指触摸,但要定位到模拟器的区域再响应多指手势就需要借助一些额外的键啦: 按住Option键,再用两个手指去操作触摸板,可模拟指拖动、旋转 按住Option+Shift,可模拟指合拢...要在模拟器测试依赖照片的功能,可以在代码里做一个workaround,即当代码检测到摄像头不可用时,弹出一个照片选择器,让测试人员从相册里选择一幅照片,来进行后续的操作照片美化、人脸识别、条码扫描

    3.9K60

    iOS项目——自定义UITabBar与布局

    我们的项目是仿写“百思不得姐”App的功能模块进行学习和提高,其TabBar的样式与微博的样式基本相似(如上图右边的图),最中间的Tab按钮也是发帖功能,也是在直接当前的页面上覆盖一个编辑发布页面,发布完成或者取消发布之后又回到之前的页面...·解决方案 对于类似新浪微博和我们项目中这种情况有两种解决思路: 定义5个TabBarItem,然后在TabBar添加一个与TabBarItem等大小的发布按钮在最中间,并添加点击事件,这样因为大小相等...有几点值得说明一: 设置所有UITabBarItem的文字属性在上一篇文章iOS项目——基本框架搭建中已经提到了,这里就不详细介绍了 【发布】按钮的初始化应该使用单例模式进行创建,因为我们项目中只有一个...****/ [self.tabBar addSubview:self.publishButton]; } #pragma mark - 懒加载 /** 发布按钮 */ - (UIButton...- 懒加载 /** 发布按钮 */ - (UIButton *)publishButton { if (!

    3K90

    当iOS遇见UI

    活动控件:大部分活动控件都继承了UIControl基类,活动控件可以与用户交互,当用户操作活动控件时,该控件可以激发相应的事件,该事件就会激发该控件为该事件绑定的事件处理方法。...当然,像UIButton之类的按钮控件,除了在活动模式激发方法之外,它并没有太多其他的功能。...对按钮来说,当用户手指放在按钮时,它才处于高亮状态。 禁用:当UI控件被关闭时,它处于禁用状态。...禁用状态的UI控件是不可操作的,如果要禁用某个控件,则可以在Interface Builder中取消选中Enabled复选框,或将控件的enabled属性设为NO。...假如向界面设计文件中添加了一个按钮UIButton),由于UIButton继承了UIControl基类,因此,可以在Xcode的属性检查器面板中看到如图1所示的UIControl的属性设置面板。

    74610

    【 iOS 应用开发 】 UIKit 控件 ( 代码生成控件 | UIView 属性方法 | Storyboard | Bundle | Property List | 动画 | 图片内存优化 )

    即可生成点击方法 ; // 一张 图片 - (IBAction)lastImage:(UIButton *)sender { } // 下一张 图片 - (IBAction)nextImage:(...模块 , Enabled 属性用来设置 按钮是否可用 , 如果 勾选 按钮可用 , 反之 按钮 会变灰 不可用 ; 2.源码中查看 enabled 属性 : 默认是 YES 可用 , 如果设置为 NO...设置按钮 禁用 启用 , index 为 1 和 5 时 分别启用 和 禁用 指定的按钮 , 其它情况可以使用两个按钮 if(self.index == 1){ self.lastButton.enabled...设置按钮 禁用 启用 , index 为 1 和 5 时 分别启用 和 禁用 指定的按钮 , 其它情况可以使用两个按钮 if(self.index == 1){ self.lastButton.enabled..., 可以随时 通过 拖动 恢复该文件 ; 3.Cancel : 取消删除操作 ; ---- ( 2 ) Storyboard 本质 ( XML 文本文件 ) Storyboard 本质 : 向 首界面

    3.9K40
    领券