2010-11-03 71 views
5

有沒有辦法做到這一點?iOS - 是否可以強制UILabel子類對象成爲第一響應者?

我試圖把下面到子類:

- (BOOL)canBecomeFirstResponder 
{ 
    return YES; 
} 

但是,當我發送的對象becomeFirstResponder消息,它仍然沒有成爲第一個響應者。

+0

的UILabel成爲第一響應?你想讓它迴應什麼? – kennytm 2010-11-03 17:18:35

+3

它從UIResponder繼承,因此它具有此功能。 – Ben 2010-11-03 17:21:24

+0

我正在使用某人的圖書館,當具有特定屬性的對象成爲第一響應者時,它會執行某些操作。它也發送消息給第一響應者。我碰巧想把所有這些與我的標籤綁定在一起。 – 2010-11-03 17:44:31

回答

0

我沒有確定的答案,只有幾個(也許是瘋狂的)想法:你是否還嘗試覆蓋becomeFirstResponder返回YES?它有userInteractionEnabled也設置爲YES

否則,使它成爲一個自定義的UIButton,而不是一個自定義的UILabel ...

1

是的,這是可能的。你應該:

  1. 覆蓋becomeFirstResponder返回YES

  2. 設置userInteractionEnabledYES

  3. 添加一個UITapGestureRecognizer來處理水龍頭。

  4. 從龍頭處理程序調用becomeFirstResponder

您甚至可以覆蓋inputView以在屏幕底部獲得輸入控件。否則就什麼都沒有了。

+0

我應該在'inputView'中返回以查看屏幕上的鍵盤? – derpoliuk 2014-04-01 07:58:17

+0

@derpoliuk感謝您的評論。我的錯,沒有檢查到UIKeyboard類是一個私人API。 – 2014-04-01 08:50:48

+0

因此,在UILabel成爲第一響應者之後沒有辦法讓屏幕上的鍵盤出現?我試圖模仿Viber或Telegram的行爲,當鍵盤在屏幕上,長按聊天消息顯示「UIMenuController」。 – derpoliuk 2014-04-01 09:25:11

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

手勢添加到您的標記以檢測水龍頭。

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]; 
    } 
相關問題