iOS获取当前页面的第一响应者

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS获取当前页面的第一响应者相关的知识,希望对你有一定的参考价值。

参考技术A 最近有个需求,里面需要用到多个textfield,键盘弹出的时候要改变frame,所以要根据当前第一项响应者的textfield取改变scrollview的contentoffset。

遍历当前的self.view的子view取判断太麻烦,后开发现了个好方法,贴出来大家一起共享下。

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];  

UIView *firstResponder = [keyWindow performSelector:@selector(firstResponder)];  

firstResponder就是当前页面的第一响应者。贼方便

IOS 键盘协议之中的一个 <UITextFieldDelegate>

1. 设置键盘的第一响应者后,便可通过点击TextField唤出键盘

设置键盘第一响应者方法为:

[textField becomeFirstResponder];//此时,textField 输入框则为当前键盘的第一响应者,故仅仅要 textField失去第一响应者,键盘才会消失

设置键盘失去第一响应者的方法为:

[textField resignFirstResponder];//一般在设置点击button的对应事件内,或写在UIView的点击触发事件内(此时点击屏幕的不论什么地方都可响应)


2. 如果一个QQ账号输入框,和一个password输入框及登陆button

当点击QQ输入框时,键盘响应,设置键盘右下角button为Next,点击Next后键盘第一响应者变为password输入框,这个时候键盘右下角button变为Done,点击键盘消失

a. 首先设置对应QQ输入框的右下角button为Next,代码为:

[ _textField_QQsetReturnKeyType:UIReturnKeyNext ];

然后设置password输入框右下角button为Done,代码为:

[ _textField_passwordsetReturnKeyType:UIReturnKeyDone ];


b. 在textField的 .h 文件里加上<UITextFieldDelegate>协议,回到 .m 文件里实现 Return 按键的方法例如以下:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {

    if (textField == _textField_QQ) { // _textField_QQ和_textField_password已被设为属性,推断键盘的第一响应者,假设是QQ输入框

        return [_textField_password becomeFirstResponder]; //点击右下角的Nextbutton,则将键盘第一响应者设为_textField_password,即密码输入框

    }else{

        return [_textField_password resignFirstResponder]; //否则(键盘第一响应者为password输入框),则使键盘失去第一响应者,即消失

    }

}




以上是关于iOS获取当前页面的第一响应者的主要内容,如果未能解决你的问题,请参考以下文章

从 NSTextField 元素获取当前的第一响应者

如何从 Cocoa 中的窗口控制器获取当前的第一响应者?

iOS开发时获取第一响应者

C# CefSharp 如何获取当前页的URL

前端react框架下,render渲染刷新分页后总会跳到第一页,怎样可以刷新后留在当前页?

js 获取当前月和当前周的第一天和最后一天