iOS – 是否可以强制一个UILabel子类对象成为第一响应者?

有没有办法做到这一点?

我试图把以下内容放入子类中:

- (BOOL)canBecomeFirstResponder { return YES; } 

但是,当我发送对象成为第一响应者消息时,它仍然没有成为第一响应者。

对的,这是可能的。 你应该:

  1. 重写becomeFirstResponder返回YES

  2. userInteractionEnabled设置为YES

  3. 添加一个UITapGestureRecognizer来处理水龙头。

  4. 从tap处理程序调用becomeFirstResponder

你甚至可以覆盖inputView来获得屏幕底部的input控件。 否则就什么都没有了。

我没有确定的答案,只有几个(也许疯狂)的想法:你是否也试图覆盖becomeFirstResponder返回YES ? 它有userInteractionEnabled也设置为YES

否则,使其成为一个自定义的UIButton而不是一个自定义的UILabel …

这对我有效。

子类UILabel并覆盖这些方法:

 - (BOOL)canBecomeFirstResponder { return YES; } - (BOOL)canPerformAction:(SEL)action withSender:(id)sender { return (action == @selector(copy:)); } - (void)copy:(id)sender { [[UIPasteboard generalPasteboard] setString:self.text]; } 

将手势添加到您的标签以检测水龙头。

 UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(LongPressDetected:)]; [_messageLabel addGestureRecognizer:longPress]; 

处理手势事件,提供具有所需帧的UIMenuController:

 - (void)LongPressDetected:(UILongPressGestureRecognizer*)gesture { [_messageLabel becomeFirstResponder]; [[UIMenuController sharedMenuController] setTargetRect:_messageLabel.bounds inView:_messageLabel]; [[UIMenuController sharedMenuController] setMenuVisible:YES animated:NO]; }