iOS – 是否可以强制一个UILabel子类对象成为第一响应者?
有没有办法做到这一点?
我试图把以下内容放入子类中:
- (BOOL)canBecomeFirstResponder { return YES; }
但是,当我发送对象成为第一响应者消息时,它仍然没有成为第一响应者。
对的,这是可能的。 你应该:
-
重写
becomeFirstResponder
返回YES
。 -
将
userInteractionEnabled
设置为YES
。 -
添加一个
UITapGestureRecognizer
来处理水龙头。 -
从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]; }