自定义UIView和becomeFirstResponder

时间:2011-12-08 21:44:26

标签: objective-c ios

我有一个自定义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)];

并且令人惊讶地firstRespondernil。所以似乎没有什么可以阻止这些事件。

1 个答案:

答案 0 :(得分:7)

您是否覆盖了becomeFirstResponder

  

子类可以覆盖此方法以更新状态或执行某些操作   突出选择的行动。

<强>跟进:

  

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

     

如果当前,响应者对象只成为第一个响应者   响应者可以辞退第一响应者状态(canResignFirstResponder)   并且新的响应者可以成为第一响应者。

     

您可以调用此方法来制作响应者对象,例如查看   急救人员。但是,您应该只在该视图上调用它   是视图层次结构的一部分。如果视图的窗口属性包含   UIWindow对象,它已安装在视图层次结构中;如果它   返回nil,视图与任何层次结构分离。

您确认您是否符合上述所有条件?