protocol的简单写法

 1 //
 2 //  TouchView.h
 3 //  LessonUIControlAndSubClass
 4
 5
 6
 7 #import <UIKit/UIKit.h>
 8
 9 @class TouchView;
10 //1.制定协议,协议名字格式:类名+Delegate
11 @protocol TouchViewDelegate <NSObject>
12
13 @optional
14 - (void)touchBegan:(TouchView *)touchView;
15 - (void)touchMoved:(TouchView *)touchView;
16 - (void)touchEnded:(TouchView *)touchView;
17 - (void)touchCancelled:(TouchView *)touchView;
18
19 @end
20
21 @interface TouchView : UIView
22
23 //2.写属性,属性名delegate,类型是id,并且要遵守协议<类名Delegate>
24 @property (assign, nonatomic) id<TouchViewDelegate> delegate;
25
26 @end

 1 //
 2 //  TouchView.m
 3 //  LessonUIControlAndSubClass
 4 //
 5
 6 #import "TouchView.h"
 7
 8 @implementation TouchView
 9
10 //3.一旦找到代理,让代理执行事情
11 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
12     //判断delegate是否实现了某方法
13     if ([_delegate respondsToSelector:@selector(touchBegan:)]) {
14         [_delegate touchBegan:self];
15     }
16 }
17
18 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
19     if ([_delegate respondsToSelector:@selector(touchMoved:)]) {
20         [_delegate touchMoved:self];
21     }
22 }
23
24 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
25     if ([_delegate respondsToSelector:@selector(touchEnded:)]) {
26         [_delegate touchEnded:self];
27     }
28 }
29
30 - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
31     if ([_delegate respondsToSelector:@selector(touchCancelled:)]) {
32         [_delegate touchCancelled:self];
33     }
34 }
35
36 @end
时间: 2024-08-10 17:02:06

protocol的简单写法的相关文章

四舍五入的一些简单写法(利用内置函数,算法2种写法)

?       //内置函数的写法        //网上零售价和折扣价在计算结束需要进行进位,规则如下:         //个位为1,2,3,4进位到5,例如计算后的价格为1201,则价格为1205:         //个位为6,7,8,9进位到0,例如计算后的价格为1209.则价格为1210:         public static string ChangePrice(double price)         {             int changed = 0;     

listView中adapter有不同的click事件的简单写法

在android中,listview一般都是通过一个adapter来绑定数据,一般的item的点击事件都会指向同一个目标(intent),只是所带的参数不同而已,但有的时候事与愿违,每个item的目标(intent)是不同的,此时我们需要一点技巧来处理这种情况...我的做法是每个item对应的entity添加一个listener ,来监听自己的事件..上代码: Listitem的定义[包含了一个onClickListener] public static class ListItem{ publ

javascript模块简单写法

写法1: (function (wd, doc) { var mw = {}; mw.noConflict = noConflict; var _$ = wd.$; wd.$ = mw; function noConflict() { wd.$ = _$; wd.mw = mw; return mw; } } )(window, document); 写法2: Xrm = function () {}; Xrm.Common = function () { var guidsAreEqual =

封装一个通用选择器的简单写法

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>j</title></head><body>    <div class="box">        <div class="cute">11111</di

Python单例的一种简单写法

最原始的想法就是每个类都重写new方法. class Dog: dog = None def __new__(cls, *args, **kwargs): if cls.dog is None: cls.dog = object.__new__(cls) print('create singleton over') return cls.dog def __init__(self, name): print('init is called') self.name = name # 下面这句话会报

SpringBoot+MyBatis项目Dao层最简单写法

前言 DAO(Data Access Object) 是数据访问层,说白了就是跟数据库打交道的,而数据库都有哪几种操作呢?没错,就是增删改查.这就意味着Dao层要提供增删改查操作. 不知道大家是怎么写Dao层的接口的.如果你没有一个好的思路,那就看看我的思路吧.如果你有更好的思路,欢迎指正. 正文 1.每一个实体类对应一个Dao接口文件和一个mybatis文件 结构如下: 2.UserDao采用统一写法 Dao层只写六个接口就能解决百分之九十的问题 User.java package com.e

Magento collection filtering 嵌套where条件的简单写法

只使用$collection->addFieldToFilter(),不使用addAttributeToFilter()或者Zend_Db_Expr(可用于更复杂的where语句) 例如:collection->getSelect()->where(new Zend_Db_Expr("(e.created_at > '2013-01-01 00:00:00' OR e.created_at <'2012-01-01 00:00:00)")); AND关系

三种简单写法教你Javascript对象封装

这里的内容没有太多深入的东西,更多的内容请移步麦子学院. Javascript在HTML中变得越来越强大, HTML5中的WebGL等.但是我们书写Javascript的时候往往很随意,使用对象的封装是极好的.这里介绍Javascipt三种创建对象的方法.  使用关键字new创建对象 Js代码   1. 2.   function Person(name, age) { 3.     this.name = name; 4.     this.age = age; 5.   } 6.   var

函数的简单写法

函数的书写规则: def 函数名(参数): ... 函数体 ... 返回值 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数(类似与一个变量) 函数体:函数中进行一系列的逻辑计算,如:接收的数据必须是数字,求最大值 等... 参数:为函数体提供数据(给函数提供一个或多个变量) 返回值:当函数执行完毕后,可以给调用者返回数据. 1.返回值 函数是一个功能块,该功能的执行结果,需要通过返回值来告知调用者 2.参数 # 无参数def test1(): p