IOS之UI--自定义按钮实现代理监听点击事件

简介:

前言:

Objective-C提供的按钮监听事件的方法是
    不含参数的监听方法
    [button实例对象 addTarget:self action:@selector(func) forControlEvents:UIControlEventTouchUpInside];
    含参数的监听方法
    [button实例对象 addTarget:self action:@selector(func:) forControlEvents:UIControlEventTouchUpInside];
下面通过代理的方式,将这两个监听事件的方法在自定义UIButton中封装起来,然后使用的时候,就类似Java的事件监听。

自定义按钮实现代理监听点击事件

因为有两种不同的监听方法,一个不含参数,一个含参数,所以最好用两个代理协议来处理,一个协议一个行为业务方法:

ButtonDelegate.h

复制代码
 1 #import <Foundation/Foundation.h>
 2 
 3 @protocol ButtonDelegate <NSObject>
 4 
 5 @required
 6 
 7 /**
 8  *  不含参数的事件监听方法
 9  */
10 -(void)delegateFunction;
11 
12 
13 @end
复制代码

ButtonDelegateWithParameter.h

复制代码
 1 #import <Foundation/Foundation.h>
 2 
 3 @protocol ButtonDelegateWithParameter <NSObject>
 4 
 5 
 6 /**
 7  *  含参数的事件监听方法
 8  */
 9 -(void)delegateFunctionWithParameter:(id)parameter;
10 
11 @end
复制代码

然后自定义UIbutton,并在自定义UIbutton中组合两个对应的代理delegate的引用。

HQButton.h

复制代码
 1 #import <UIKit/UIKit.h>
 2 #import "ButtonDelegate.h"
 3 #import "ButtonDelegateWithParameter.h"
 4 
 5 @interface HQButton : UIButton
 6 
 7 /** 代理 */
 8 @property (nonatomic,weak)id<ButtonDelegate> delegate;
 9 
10 /** 含参数代理 */
11 @property (nonatomic,weak)id<ButtonDelegateWithParameter> delegateWithParamater;
12 
13 @end
复制代码

HQButton.m

复制代码
 1 #import "HQButton.h"
 2 
 3 @implementation HQButton
 4 
 5 /**
 6  *  懒加载的使用,在需要监听代理的时候,所以只需要重写set方法,然后在set方法中实现加载delegate
 7  *  亮点:就是重写set方法内部实现addTarget方法,监听self的func,然后在func内部调用delegate的实现协议的方法
 8  *  @return void
 9  */
10 -(void)setDelegate:(id<ButtonDelegate>)delegate
11 {
12     [self addTarget:self action:@selector(func) forControlEvents:UIControlEventTouchUpInside];
13     _delegate = delegate;
14     
15 }
16 -(void)setDelegateWithParamater:(id<ButtonDelegateWithParameter>)delegateWithParamater{
17     [self addTarget:self action:@selector(funcWithParameter:) forControlEvents:UIControlEventTouchUpInside];
18     _delegateWithParamater = delegateWithParamater;
19 }
20 
21 -(void)func
22 {
23     [self.delegate delegateFunction];
24 }
25 -(void)funcWithParameter:(id)parameter
26 {
27     [self.delegateWithParamater delegateFunctionWithParameter:parameter];
28 }
29 @end
复制代码

在ViewController中实现相关的协议,然后使用这个自定义button然后添加delegate。

复制代码
 1 #import "ViewController.h"
 2 #import "HQButton.h"
 3 
 4 @interface ViewController ()<ButtonDelegate,ButtonDelegateWithParameter>
 5 
 6 @end
 7 
 8 @implementation ViewController
 9 
10 - (void)viewDidLoad {
11     [super viewDidLoad];
12     
13     //============创建自定义按钮================
14     HQButton* button = [[HQButton alloc] init];
15     
16     //添加含参数的代理
17     button.delegateWithParamater = self;
18     //设置按钮的位置,背景颜色,显示文字
19     button.frame = CGRectMake(100, 100, 200, 100);
20     button.backgroundColor = [UIColor redColor];
21     
22     //=============为按钮添加代理==============
23     //添加不含参数的代理
24     button.delegate = self;
25 
26     //父控件添加这个按钮
27     [self.view addSubview:button];
28     
29 }
30 
31 - (void)didReceiveMemoryWarning {
32     [super didReceiveMemoryWarning];
33     
34 }
35 //=============实现协议里的方法==============
36 -(void)delegateFunction{
37     NSLog(@"Hello");
38 }
39 
40 -(void)delegateFunctionWithParameter:(id)parameter{
41     NSLog(@"self: %@",parameter);
42 }
43 
44 @end
复制代码
相关文章
|
2月前
|
API UED 容器
深入探索 Element UI:自定义滚动条与弹出层管理的技巧
在这篇博客中,我们将深入探讨 Element UI 中的自定义滚动条及弹出层管理技巧。文章详细介绍了 el-scrollbar 组件的使用和参数设置,以及 PopupManager 如何有效管理弹出层的 z-index。我们还将探讨如何实现灵活的全屏组件,利用 vue-popper 创建自定义弹出层,最后介绍 ClickOutside 指令的用法。这些高级技巧将帮助你提升 Element UI 应用程序的用户体验与交互灵活性。
222 1
深入探索 Element UI:自定义滚动条与弹出层管理的技巧
|
25天前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户点击按钮时,按钮将从圆形变为椭圆形,颜色从蓝色渐变到绿色;释放按钮时,动画以相反方式恢复。通过UIView的动画方法和弹簧动画效果,实现平滑自然的过渡。
46 1
|
2月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
【10月更文挑战第18天】本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户按下按钮时,按钮将从圆形变为椭圆形并从蓝色渐变为绿色;释放按钮时,动画恢复原状。通过UIView的动画方法和弹簧动画效果,实现平滑自然的动画过渡。
50 5
|
2月前
|
Swift iOS开发 UED
实现一个自定义的iOS动画效果
本文介绍如何使用Swift和UIKit在iOS应用中实现一个自定义按钮动画,当按钮被点击时,其颜色从蓝色渐变为绿色,形状从圆形变为椭圆形,释放后恢复原状。通过UIView动画方法实现这一效果,代码示例展示了动画的平滑过渡和状态切换,有助于提升应用的视觉体验和用户交互。
50 1
|
3月前
|
Swift iOS开发 UED
揭秘一款iOS应用中令人惊叹的自定义动画效果,带你领略编程艺术的魅力所在!
【9月更文挑战第5天】本文通过具体案例介绍如何在iOS应用中使用Swift与UIKit实现自定义按钮动画,当用户点击按钮时,按钮将从圆形变为椭圆形并从蓝色渐变到绿色,释放后恢复原状。文中详细展示了代码实现过程及动画平滑过渡的技巧,帮助读者提升应用的视觉体验与特色。
63 11
|
4月前
|
Swift iOS开发 UED
【绝妙创意】颠覆你的视觉体验!揭秘一款iOS应用中令人惊叹的自定义动画效果,带你领略编程艺术的魅力所在!
【8月更文挑战第13天】本文通过一个具体案例,介绍如何使用Swift与UIKit在iOS应用中创建独特的按钮动画效果。当按钮被按下时,其形状从圆形变化为椭圆形,颜色则从蓝色渐变为绿色;释放后,动画反向恢复原状。利用UIView动画方法及弹簧动画效果,实现了平滑自然的过渡。通过调整参数,开发者可以进一步优化动画体验,增强应用的互动性和视觉吸引力。
52 7
|
4月前
|
前端开发 开发者 C#
深度解析 Uno Platform 中的 MVVM 模式:从理论到实践的全方位指南,助你轻松掌握通过 C# 与 XAML 构建高效可维护的跨平台应用秘籍
【8月更文挑战第31天】本文详细介绍如何在优秀的跨平台 UI 框架 Uno Platform 中实施 MVVM(Model-View-ViewModel)模式,通过一个简单的待办事项列表应用演示其实现过程。MVVM 模式有助于分离视图层与业务逻辑层,提升代码组织性、易测性和可维护性。Uno Platform 的数据绑定机制使视图与模型间的同步变得高效简便。文章通过构造 `TodoListViewModel` 类及其相关视图,展示了如何解耦视图与模型,实现动态数据绑定及命令处理,从而提高代码质量和开发效率。通过这一模式,开发者能更轻松地构建复杂的跨平台应用。
56 0
|
4月前
|
测试技术 Swift iOS开发
探索iOS自动化测试:使用Swift编写UI测试
【8月更文挑战第31天】在软件开发的海洋中,自动化测试是保证船只不偏离航线的灯塔。本文将带领读者启航,深入探索iOS应用的自动化UI测试。我们将通过Swift语言,点亮代码的灯塔,照亮测试的道路。文章不仅会展示如何搭建测试环境,还会提供实用的代码示例,让理论知识在实践中生根发芽。无论你是新手还是有经验的开发者,这篇文章都将是你技能提升之旅的宝贵指南。
|
4月前
|
JavaScript 前端开发
Vue实现Element UI框架的自定义输入框或下拉框在输入时对列表选项进行过滤,以及右键列表选项弹出菜单进行删除
本文介绍了如何在Vue框架结合Element UI库实现自定义输入框或下拉框,在输入时对列表选项进行过滤,并支持右键点击列表选项弹出菜单进行删除的功能。
86 0
|
5月前
|
JavaScript
vue + element UI 表单中内嵌自定义组件的表单校验触发方案
vue + element UI 表单中内嵌自定义组件的表单校验触发方案
165 5