自定义UIView和becomeFirstResponder

Ral*_*eon 5 objective-c ios

我有一个实现UIKeyInput协议的自定义UIView

- (BOOL) canBecomeFirstResponder{ 
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

在子类中定义.致电时:

[customView becomeFirstResponder];
NSLog(@"is first? %i",[customView isFirstResponder]);
Run Code Online (Sandbox Code Playgroud)

在单击按钮期间,即使 canBecomeFirstResponder已正确设置并且所有UIKeyInput协议功能都已实现,它也会返回false .还有什么东西可以阻止这种观点成为第一个响应者?如果有帮助,它将存在于scrollView和另一个自定义视图中.

更新:

我检查了当前的第一响应者是什么:

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView   *firstResponder = [keyWindow performSelector:@selector(firstResponder)];
Run Code Online (Sandbox Code Playgroud)

而且令人惊讶的firstRespondernil.所以似乎没有什么可以阻止这些事件.

Ste*_*eve 7

你覆盖了becomeFirstResponder吗?

子类可以覆盖此方法以更新状态或执行某些操作,例如突出显示选择.

跟进:

子类可以覆盖此方法以更新状态或执行某些操作,例如突出显示选择.

如果当前响应者可以辞退第一响应者状态(canResignFirstResponder)并且新响应者可以成为第一响应者,则响应者对象仅成为第一响应者.

您可以调用此方法来创建响应者对象,例如查看第一响应者.但是,如果它是视图层次结构的一部分,则只应在该视图上调用它.如果视图的window属性包含UIWindow对象,则它已安装在视图层次结构中; 如果它返回nil,则视图将从任何层次结构中分离.

你确认你符合上述所有条件吗?