自定义UIView和becomeFirstResponder
我有一个实现UIKeyInput
协议的自定义UIView
- (BOOL) canBecomeFirstResponder{ return YES; }
在子类中定义。 致电时:
[customView becomeFirstResponder]; NSLog(@"is first? %i",[customView isFirstResponder]);
在按钮单击期间, 即使正确设置了UIKeyInput
并且实现了所有UIKeyInput
协议function,它也会返回false。 还有什么东西阻止这种观点成为第一个响应者? 如果有帮助,它将存在于scrollView和另一个自定义视图中。
更新:
我检查了当前的第一响应者是什么:
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow]; UIView *firstResponder = [keyWindow performSelector:@selector(firstResponder)];
令人惊讶的是,第一个firstResponder
是nil
。 所以似乎没有什么可以阻止这些事件。
你是否覆盖了becomeFirstResponder
?
子类可以覆盖此方法以更新状态或执行某些操作,例如突出显示选择。
跟进:
子类可以覆盖此方法以更新状态或执行某些操作,例如突出显示选择。
如果当前响应者可以辞退第一响应者状态(canResignFirstResponder)并且新响应者可以成为第一响应者,则响应者对象仅成为第一响应者。
您可以调用此方法来创建响应者对象,例如查看第一响应者。 但是,如果它是视图层次结构的一部分,则只应在该视图上调用它。 如果视图的window属性包含UIWindow对象,则它已安装在视图层次结构中; 如果它返回nil,则视图将从任何层次结构中分离。
你确认你符合上述所有条件吗?