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

Mac开发跬步积累(六): 响应链NSResponder Chain

, NSWindow, NSDrawer, NSWindowController, NSView等均是如此; 响应者是构成响应链中的一部分. 0x03 第一应者 第一应者是指用户通过鼠标或者键盘选择的交互对象...键盘事件响应开始 键盘事件与鼠标事件的起始响应者是不一样的,在viewDidAppear方法中,我们添加代码查看一下:当前窗口的第一应者对象信息: ?...窗口的第一应者 根据控制台信息,我们可以看出键盘事件的第一应者是当前窗口对象NSWindow,在键盘事件的整个响应链中,ViewController是被忽略的,所以ViewController中的...答案:是改变第一应者,因为键盘事件是从第一应者开始的! 我们需要将响应链设置为下图的效果即可:(View获取键盘事件后如果自己不响应,就会依据响应链传递给ViewController) ?...开启第一应者 运行代码,查看控制台信息,第一应者是XCResponseView,而且ViewController响应了键盘事件! ?

2.2K10
您找到你想要的搜索结果了吗?
是的
没有找到

iOS 键盘和UIMenuController的并存问题

问题描述 当UITextView 处于编辑状态时,即键盘存在时,UITextView是第一应者,而当需要弹出UIMenuController时,第一应者需要变更为处理UIMenuController...菜单事件的对象,此时UITextView就不是第一应者键盘就会隐藏,造成键盘和UIMenuController不能同时出现。...在保证UITextView第一应者的前提下,我们可以覆盖改变UITextView的nextResponder,让nextResponder指向UIMenuController菜单事件的执行者;同时也要注意...- (void)longPressShowMenuView:(UILongPressGestureRecognizer *)longPress { //编辑过程中,self.textView是第一应者...if(self.textView.isFirstResponder){ //如果textView是第一应者,则对titleLabel进行响应链透传,覆盖self.textView

1.7K20

ios学习——键盘的收起

在开发过程中,我们经常会用到UITextField、UITextView等文本框,然后这些文本框在点击之后会自动成为第一应者(FirstResponder),并自动弹出软键盘。...然而,没有自动定义好的软键盘的回收。今天,我在开发过程中就遇到了这个问题,首先,软键盘收起会发生在两种情况下,一是当前区域为非第一应者,二是当前区域的输入结束。...具体解决方案有两种: 1、在当前页面设置点击事件,当点击事件发生时,注销当前视图的第一应者或者设置当前摄入结束。...2、利用键盘上的 回车键 来进行设置当前UITextField、UITextView等文本框不是第一应者,这种方法对UITextField、UITextView的应用不一样,需要区别进行。   ...但是,我们可以根据UITextViewDelegate提供的方法对键盘输入的值进行判断,如果为回车键(\n)则设置当前UITextView不是第一应者,否则不操作。

1.8K60

iOS学习——键盘弹出遮挡输入框问题解决方案

UITextField的整个输入过程分为如下7个步骤(如下过程,textfield换成textView即是TextView的响应过程): 在成为第一应者之前,文本框调用其代理的  方法来允许或阻止其第一应者...,并控制是否对文本框进行输入 textFieldShouldBeginEditing: 成为第一应者,对应的相应事件就是系统调用键盘(自动弹出),并且系统会根据需要发出UIKeyboardWillShowNotification...,系统会调用  方法 textFieldShouldEndEditing: 文本框注销第一应者,对应的响应时间就是系统收回键盘,并且在隐藏键盘时会发出 UIKeyboardWillHideNotification...first responder),文本框成为第一应者的结果就是可以输入文本内容并弹出键盘,所以,我们可以在这个方法中通过返回值来判断是否弹出键盘。...返回NO则不弹出键盘 } 2.1 收起键盘的控制   通过前面的分析我们知道,收起键盘主要是要注销文本框的第一应者身份即可,所以,我们再需要控制键盘收起的时候调用 textFieldShouldEndEditing

3.4K60

UI篇-UIResponder之事件传递和响应精析

第一应者是应用程序中当前负责接收触摸事件的响应者对象(通常是一个UIView对象)。...响应者链:由一系列“下一个响应者”组成 其顺序如下: 1.iOS系统在处理事件时,通过UIApplication对象和每个UIWindow对象的sendEvent:方法将事件以消息的形式分发给具体处理此事件的第一应者...如果第一应者没有进行处理,第一应者将事件将处理事件的责任传递给下一个,更高级的对象,即当前responder对象的nextResponder。...我们在使用UITextView和UITextField的时候,可以通过它们的inputAccessoryView属性给输入时呼出的键盘加一个附属视图,通常是UIToolBar,用于回收键盘。...(难道cell被选中时不是第一应者?)

2.4K30

iOS学习——tableview中带编辑功能的cell键盘弹出遮挡和收起问题解决

下面的流程就是UITextField或UITextView在整个编辑过程中的详细流程步骤: 在成为第一应者之前,文本框调用其代理的textFieldShouldBeginEditing:  方法来允许或阻止其第一应者...,并控制是否对文本框进行输入 成为第一应者,对应的相应事件就是系统调用键盘(自动弹出),并且系统会根据需要发出UIKeyboardWillShowNotification 和UIKeyboardDidShowNotification...所以我们不能调用textFieldShouldClear: 方法和 textFieldShouldReturn: 方法实现【clear/清除】和【return/完成】按键的效果  在文本框输入即将结束,即即将注销第一应者时...,系统会调用 textFieldShouldEndEditing: 方法 文本框注销第一应者,对应的响应时间就是系统收回键盘,并且在隐藏键盘时会发出 UIKeyboardWillHideNotification...,和弹出键盘相对,弹出键盘时我们保存了弹出键盘之前tableview的contentOffset的偏移量,所以,在收起键盘后,我们将tableview的contentOffset值设为弹出之前的值就可以了

3.8K80

关于电脑无法开机或无法启动的几种可能和解决方案

1长3短:键盘控制器错误。    1长9短:主板Flash RAM或EPROM错误,BIOS损坏。    不断地(长声):内存条未插紧或损坏。    不停地:电源、显示器未和显卡连接好。    ...重复短:电源有问题。    无声音无显示:电源有问题。    AWI BIOS:    1短:内存刷新失败。解决方法,更换内存条。    2短:内存ECC校验错误。...3短2短4短:键盘控制器错误。    3短3短4短:显示卡内存错误。    3短4短2短:显示错误。    3短4短3短:未发现显示只读存储器。    4短2短1短:时钟错误。    ...3长1短:键盘错误。...安装好驱动即可(上次电脑重装碰到过,不过还好解决了,一般win8.1以上都有很多万能驱动) 问题七:找不到系统(暂时没图片,具体应该显示为正在搜索系统)     1.启动顺序错误--请检查网卡等设备是不是在第一启动项

1.5K10

电脑开机报警声音大全

1长3短:键盘控制器错误。检查主板。 1长9短:主板FlashRAM或EPROM错误,BIOS损坏。换块FlashRAM试试。 不断地(长声):内存条未插紧或损坏。...不停地:电源、显示器未和显示卡连接好。检查一下所有的插头。 重复短:电源问题。 无声音无显示:电源问题。 AMIBIOS响铃声的一般含义是: 1.一短声,内存刷新失败。...6.六短声,键盘控制器错误。如果是键盘没插上,那好办,插上就行;如果键盘连接正常但有错误提示,则不妨换一个好的键盘试试;否则就是键盘控制芯片或相关的部位有问题了。...短EISANMI口错误 2短1短1短前64K基本内存错误 3短1短1短DMA寄存器错误 3短1短2短主DMA寄存器错误 3短1短3短主中断处理寄存器错误 3短1短4短从中断处理寄存器错误 3短2短4短键盘控制器错误

1.4K40

IOS触摸事件分发机制详解

在UIKit中,UIApplication、UIView、UIViewController这几个类都是直接继承自UIResponder类 第一应者(first responder) 第一应者能够优先处理事件...,通常是一个UIView的对象,如果一个普通的对象想成为第一应者,只需要做两件事情: 重写canBecomeFirstResponder方法返回YES 调用becomeFirstResponder 提示...:当一个对象变成第一应者的时候,要确保APP已经建立了object graph(暂且翻译为”对象图“),举例说明,你可以在viewDidAppear: 调用becomeFirstResponder,如果你在...(UIResponder)链接起来的,起始于第一应者(first responder),结束于UIApplication,当第一应者(first responder)不能处理该事件的时候,事件消息沿着响应链继续转发...每个响应者决定它是传递事件还是通过nextResponder方法传递给它的下一个响应者。这个操作继续直到一个响应者处理该事件或者没有响应者了。

3.4K90

c语言中getchar的运用_c语言中gets和getchar

相当于清除缓冲区 2.前面的scanf()在读取输入时会在缓冲区中留下一个字符’\n'(输入完s[i]的值后按回车键所致), 所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符...=’\n’); (2)用getche()或getch()代替getchar(),其作用是从键盘读入一个字符(不用按回车),注意要 包含头文件 4....【转】 getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数 据的话不用输入它就可以直接读取了,第一次getchar()时,确实需要人工的输入...实际上是 输入设备->内存缓冲区->程序getchar 你按的键是放进缓冲区了,然后供程序getchar 你有没有试过按住很多键然后等一会儿会滴滴滴滴,就是缓冲区满了,你后头按的键没有存进缓冲区....键盘输入的字符都存到缓冲区内,一旦键入回车,getchar就进入缓冲区读取字符,一次只返回第一个 字符作为getchar函数的值,如果有循环或足够多的getchar语句,就会依次读出缓冲区内的所有字符

2.8K20

18-信号量相关问题(吸烟者,读者-写者等)

吸烟者问题 假设一个系统有三个抽烟者进程和一个供应者进程。每个抽烟者不停地卷烟并抽掉它,但是要卷起并抽掉一支烟,抽烟者需要有三种材料:烟草、纸和胶水。...三个抽烟者中,第一个拥有烟草、第二个拥有纸、第三个拥有胶水。...供应者进程无限地提供三种材料,供应者每次将两种材料放桌子上,拥有剩下那种材料的抽烟者卷一根烟并抽掉它,并给供应者进程一个信号告诉完成了,供应者就会放另外两种材料再桌上,这个过程一直重复(让三个抽烟者轮流地抽烟...) 以上图为例,供应者向桌上摆放烟草和纸两种材料,缺少这两种材料的三号吸烟者就会取走材料吸烟,在吸烟结束后会提醒供应者放新的材料在桌上 根据题目我们直到,放在桌上的材料一共有三种组合方式 纸和胶水(order1...本题可以看作是存在一个生产者和多个消费者的问题,同时生产者所生产的物品并不相同 关系分析 找出题目中描述的各个进程,分析同步互斥关系 互斥关系:桌子可以抽象为容量为1的缓冲区,需要互斥访问 同步关系:桌上有组合一时第一个抽烟者取走物品

38920

应者链3. 手势识别功能(Gesture Recognizer)4. 手势的使用

最终找到这个干活的控件,我们学术上就叫做第一应者对象。找到了负责处理的按钮之后如何给出相应处理呢?大概过程就是这样: button尝试处理事件。如果它不能处理事件,则将事件传递给其父视图。...对于第一应者,UIResponder提供了一系列方法,我们分别来介绍一下。...如果想判定一个响应对象是否是第一应者,则可以使用以下方法: (BOOL)isFirstResponder 如果我们希望将一个响应对象作为第一应者,则可以使用以下方法: (BOOL)becomeFirstResponder...一个响应对象只有在当前响应者能放弃第一应者状态(canResignFirstResponder)且自身能成为第一应者(canBecomeFirstResponder)时才会成为第一应者。...//判断是否能够成为第一应者 - (BOOL)canBecomeFirstResponder //响应者放弃第一应者身份 - (BOOL)resignFirstResponder - (BOOL)

2.1K40

iOS面试题:事件传递和响应机制

主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件,这也是整个事件处理过程的第一步。 找到合适的视图控件后,就会调用视图控件的touches方法来作具体的事件处理。 2....也可以说,响应者链是由多个响应者对象连接起来的链条。...在iOS中响应者链的关系可以用下图表示: 响应者对象 能处理事件的对象,也就是继承自UIResponder的对象 作用 能很清楚的看见每个响应者之间的联系,并且可以让一个事件多个对象处理。...如何判断上一个响应者 1 如果当前这个view是控制器的view,那么控制器就是上一个响应者 2 如果当前这个view不是控制器的view,那么父控件就是上一个响应者应者链的事件传递过程 1 如果当前...(至此,第一步已完成) 4.最合适的view会调用自己的touches方法处理事件 5.touches默认做法是把事件顺着响应者链条向上抛。

1.1K10
领券