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