Responder对象



响应者是一个对象,它可以响应事件并处理它们。所有响应者对象是类的,最终从UIResponder的(
IOS)或NSResponder ( OS X)继承实例。这些类声明一个编程接口,事件处理,并定义为响应一个默认的行为。一个应用程序的可视对象几乎都是反应,例如,窗口,视图和控件和应用程序对象是一个响应者为好。在iOS中,视图控制器(的UIViewController对象)也响应对象。





接收事件,响应者必须实现适当的事件处理方法,在某些情况下,告诉应用程序,它可以成为第一个响应者。



第一响应者接收到某些事件第一

在一个应用程序,由最先收到多种事件的响应者对象被称为第一响应者。它接收键盘事件,移动事件,并采取行动的消息,等等。 (鼠标事件和多点触控事件第一次去是鼠标指针或手指下的视图;这种观点可能会或可能不会是第一个响应者)的第一个响应者通常是在一个应用程序认为最适合于处理窗口的视图一个事件。要接收一个事件,响应者也必须表明其愿意成为第一个响应者,它这样做以不同的方式为每个平台:



/ / OS X

- ( BOOL ) acceptsFirstResponder {return YES ; }

 

/ /iOS

- ( BOOL ) canBecomeFirstResponder {return YES ; }

除了接收事件消息,响应者可以接收没有指定的目标操作的消息。 (动作消息是由如按钮,当用户操纵它们的控件控件发送。




响应链协同启用事件处理

如果第一个响应者不能处理一个事件或动作消息,它将其转发到所谓的响应链连结的系列“下一个响应者”
。在响应链中允许响应者对象传送处理的事件或动作消息在应用程序的其他对象的责任。如果在响应链中的对象不能处理这个事件或动作,它传递消息给链中的下一个响应者。该消息传播链向上,向更高级别的对象,直到它被处理。如果它没有被处理,该应用将其丢弃。

响应者链的iOS (左)和OS X (右)

一个事件的路径。一个事件了响应者链的一般路径开始于一个视图的第一个鼠标指针或手指下的响应或视图。从那里,它进行了视图层次结构的窗口对象,然后到全局应用程序对象。然而,响应者链中的iOS事件增加了一个变化到这个路径:如果视图是由一个视图控制器管理,如果视图不能处理事件,视图控制器成为下一个响应者。



操作消息的路径。采取行动的消息,
OS X和iOS的延长响应链到其他对象。在OS
X中,响应链的操作的消息不同,基于文档的架构,使用窗口控制器( NSWindowController )的应用程序,以及一个应用程序,既不符合这些类别的应用程序。此外,如果在OS
X的应用程序都包含一个重要窗口和一个主窗口,响应链沿着这一个动作消息传播可能涉及两个窗口的视图层次结构。

Responder对象的更多相关文章

  1. 响应链和UIKit框架

    Event Delivery: The Responder Chain When you design your app, it’s likely that you want to respond t ...

  2. FlasActionScript3随学随机

    1.跳转页面代码.下载代码(new URLRequest(下载地址)): var request1:URLRequest=new URLRequest("http://www.baidu.c ...

  3. ioS基础篇(十九)——UIResponder简析

    UIResponder类定义了对象相应和控制事件的接口,他是UIApplication.UIView的超类,这类的实例通常被称为应答对象. 一.Responder对象 在iOS系统中,能够响应并处理事 ...

  4. UIKIT的简介

    // // UIKIT各框架的简介 // IOS笔记 // // Created by 刘威成 on 13/12/14. // Copyright © 2015年 刘威成. All rights re ...

  5. Adobe Scout 使用参考说明

    Adobe Scout 用于优化 Flash 内容,是一款极为强大的工具,因为它能让您看到 Flash Player 幕后正在发生的事情.但是若明白 Flash Player 为什么做这些事情,您看到 ...

  6. 【IOS笔记】Views

    Views Because view objects are the main way your application interacts with the user, they have many ...

  7. UIKit各类概述

    1.UIAcceleration: 被叫做加速事件的一个UIAcceleration类的实例是用来代表即时的三维加速数据.为了接收重力加速度,要注册一个应用应用程序作为一个共享UIAccelerate ...

  8. iOS/iPhone 程序文件目录结构以及启动流程

    要想清晰的理解IOS应用程序的启动过程,毫无疑问需要深入了解一下ios应用程序的文件系统.一个ios应用程序都有一个属于自己沙盒(sandbox),应用沙盒就是文件系统目录,并且与文件系统的其他部分隔 ...

  9. UIResponder学习

    http://blog.csdn.net/jimzhai/article/details/23283515 UIResponder 介绍 UIResponder 这个类定义了很多用来处理响应和时间处理 ...

随机推荐

  1. API详解

  2. PHP - 实现 strStr()

    实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在,则返 ...

  3. python_django_The requested URL /sunck/login/sunck/showmain/ was not found on this server.错误

    在我url匹配过程中出现了这样一个错误: 网页显示: Not Found The requested URL /sunck/login/sunck/showmain/ was not found on ...

  4. nodejs route的简单使用

    demo var express=require('express'); var app=express(); var routeUser=express.Router(); var routeTea ...

  5. css导行下拉动画

    <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" ...

  6. JavaScript做个时间表 Date()

    <span id="shiji"></span><script> window.setInterval("time()",5 ...

  7. 01二维背包——poj2576

    /* 要求把a数组分成两个集合,两个集合人数最多差1,并且元素之和的差尽可能小 那只要把所有可行的列出来即可 01二维背包,即体积是个二维数据,那么我们的背包状态也应该设为二维 dp[j][k]设为 ...

  8. mac 安装并使用 mysql 或者 mac mysql 忘记密码,Can't connect to local MySQL server through socket homebrew

    1. brew install mysql 2. 启动mysql mysql.server start 我遇到了这个error,查openstack解决,我在这粘一下 ### Error:Can't ...

  9. kubernetes session and 容器root权限

    session保持 如何在service内部实现session保持呢?当然是在service的yaml里进行设置啦. 在service的yaml的sepc里加入以下代码: sessionAffinit ...

  10. jquery操作html元素之( 尺寸)

    jQuery 提供多个处理尺寸的重要方法: width() height() innerWidth() innerHeight() outerWidth() outerHeight() jQuery ...