2010-11-03 3 views
5

Có cách nào để thực hiện việc này không?iOS - có thể buộc một đối tượng lớp con UILabel trở thành người trả lời đầu tiên không?

Tôi đã thử đặt sau đây vào các lớp con:

- (BOOL)canBecomeFirstResponder 
{ 
    return YES; 
} 

Nhưng khi tôi gửi các đối tượng nhắn becomeFirstResponder, nó vẫn không trở thành responder đầu tiên.

+0

UILabel trở thành một responder đầu tiên? Bạn muốn phản hồi điều gì? – kennytm

+3

Nó kế thừa từ UIResponder để nó có khả năng. – Ben

+0

Tôi đang sử dụng thư viện của ai đó thực hiện công cụ khi một đối tượng có thuộc tính nhất định trở thành người trả lời đầu tiên. Nó cũng gửi tin nhắn cho người trả lời đầu tiên. Tôi tình cờ muốn gắn tất cả điều này vào nhãn của tôi. –

Trả lời

0

Tôi không có câu trả lời rõ ràng, chỉ là một vài ý tưởng (có thể là điên): Bạn cũng đã cố gắng ghi đè becomeFirstResponder để trả lại YES? Liệu nó có userInteractionEnabled cũng được đặt thành YES?

Nếu không, hãy đặt UIButton tùy chỉnh thay vì UIL tùy chỉnh ...

1

Có, có thể. Bạn nên:

  1. Ghi đè becomeFirstResponder để trả lại YES.

  2. Đặt userInteractionEnabled đến YES.

  3. Thêm UITapGestureRecognizer để xử lý các vòi.

  4. Gọi becomeFirstResponder từ trình xử lý nhấn.

Bạn thậm chí có thể ghi đè inputView để nhận điều khiển đầu vào ở cuối màn hình. Nếu không thì sẽ không có gì.

+0

Điều gì tôi nên quay lại trong 'inputView' để xem bàn phím trên màn hình? – derpoliuk

+0

@derpoliuk cảm ơn nhận xét. Lỗi của tôi, không kiểm tra rằng lớp UIKeyboard là một API riêng tư. –

+0

Vì vậy, không có cách nào để có được bàn phím trên màn hình sau khi 'UILabel' trở thành người trả lời đầu tiên? Tôi đang cố gắng bắt chước hành vi Viber hoặc Telegram, khi bàn phím trên màn hình và nhấn và giữ trên tin nhắn trò chuyện hiển thị 'UIMenuController'. – derpoliuk

0

Điều này phù hợp với tôi.

Subclass UILabel và ghi đè lên các phương pháp:

- (BOOL)canBecomeFirstResponder { 
     return YES; 
    } 

    - (BOOL)canPerformAction:(SEL)action 
        withSender:(id)sender 
    { 
     return (action == @selector(copy:)); 
    } 

    - (void)copy:(id)sender { 
     [[UIPasteboard generalPasteboard] setString:self.text]; 
    } 

Thêm Gesture vào nhãn của bạn để phát hiện máy.

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

Xử lý sự kiện cử chỉ, trình bày một UIMenuController với khung mong muốn:

- (void)LongPressDetected:(UILongPressGestureRecognizer*)gesture { 

     [_messageLabel becomeFirstResponder]; 
     [[UIMenuController sharedMenuController] setTargetRect:_messageLabel.bounds inView:_messageLabel]; 
     [[UIMenuController sharedMenuController] setMenuVisible:YES animated:NO]; 
    }