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

时间:2010-11-03 17:15:36

标签: iphone ios first-responder

有没有办法做到这一点?

我尝试将以下内容放入子类中:

- (BOOL)canBecomeFirstResponder 
{
    return YES;
}

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

3 个答案:

答案 0 :(得分:1)

是的,有可能。你应该:

  1. 覆盖becomeFirstResponder以返回YES

  2. userInteractionEnabled设为YES

  3. 添加UITapGestureRecognizer来处理点按。

  4. 从点击处理程序中调用becomeFirstResponder

  5. 您甚至可以覆盖inputView以获得屏幕底部的输入控件。否则什么都没有。

答案 1 :(得分:0)

我没有明确的答案,只有一些(可能是疯狂的)想法:您是否还试图覆盖becomeFirstResponder以返回YES?是否userInteractionEnabled也设置为YES

否则,将其设为自定义UIButton而不是自定义UILabel ...

答案 2 :(得分:0)

这对我有用。

子类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];
    }

将Gesture添加到标签中以检测水龙头。

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];
    }
相关问题