在 Mac OS X 中,您可以这样找到第一响应者:
[[self window] firstResponder]
在iOS中有什么方法可以做到这一点吗?或者您是否需要枚举子控件并发送isFirstResponder
给每一位留言?
我很喜欢VJK的解决方案 https://stackoverflow.com/a/10358135/322427,但正如 MattDiPasquale 所说,这似乎比必要的更复杂。所以我写了这个更简单的版本:
Objective-C
UIResponder+FirstResponder.h:
#import <UIKit/UIKit.h>
@interface UIResponder (FirstResponder)
+(id)currentFirstResponder;
@end
UIResponder+FirstResponder.m:
#import "UIResponder+FirstResponder.h"
static __weak id currentFirstResponder;
@implementation UIResponder (FirstResponder)
+(id)currentFirstResponder {
currentFirstResponder = nil;
[[UIApplication sharedApplication] sendAction:@selector(findFirstResponder:) to:nil from:nil forEvent:nil];
return currentFirstResponder;
}
-(void)findFirstResponder:(id)sender {
currentFirstResponder = self;
}
@end
Swift 4
import UIKit
extension UIResponder {
private static weak var _currentFirstResponder: UIResponder?
static var currentFirstResponder: UIResponder? {
_currentFirstResponder = nil
UIApplication.shared.sendAction(#selector(UIResponder.findFirstResponder(_:)), to: nil, from: nil, for: nil)
return _currentFirstResponder
}
@objc func findFirstResponder(_ sender: Any) {
UIResponder._currentFirstResponder = self
}
}
我还将它作为一个类方法,因为这似乎更有意义。您现在可以像这样找到第一响应者:[UIResponder currentFirstResponder]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)