2010-11-03 11 views
5

क्या ऐसा करने का कोई तरीका है?आईओएस - क्या यूआईएलएबल सबक्लास ऑब्जेक्ट को पहला उत्तरदाता बनने के लिए मजबूर करना संभव है?

मैं उपवर्ग में निम्नलिखित डाल करने की कोशिश की:

- (BOOL)canBecomeFirstResponder 
{ 
    return YES; 
} 

लेकिन जब मैं वस्तु एक becomeFirstResponder संदेश भेजा, यह अभी भी पहले प्रत्युत्तर नहीं हुआ है।

+0

UILabel एक प्रथम प्रत्युत्तर बनने? आप इसे क्या जवाब देना चाहते हैं? – kennytm

+3

यह यूरीस्पॉन्डर से विरासत में है इसलिए इसमें क्षमता है। – Ben

+0

मैं किसी की लाइब्रेरी का उपयोग कर रहा हूं जो सामान करता है जब कुछ गुणों वाला ऑब्जेक्ट पहला उत्तरदाता बन जाता है। यह पहले उत्तरदाता को संदेश भेजता है। मैं यह सब अपने लेबल में जोड़ना चाहता हूं। –

उत्तर

0

मेरे पास कोई निश्चित उत्तर नहीं है, केवल कुछ (शायद पागल) विचार: क्या आपने वापस करने के लिए becomeFirstResponder को ओवरराइड करने का भी प्रयास किया है? क्या इसमें userInteractionEnabled भी YES पर सेट है?

अन्यथा, यह एक कस्टम UIButton के बजाय एक कस्टम UILabel

1

हाँ, यह संभव है बनाने के ...। आप चाहिए:

  1. अवहेलना becomeFirstResponderYES वापस जाने के लिए।

  2. userInteractionEnabledYES पर सेट करें।

  3. नल को संभालने के लिए UITapGestureRecognizer जोड़ें।

  4. टैप हैंडलर से becomeFirstResponder पर कॉल करें।

आप स्क्रीन के नीचे इनपुट नियंत्रण प्राप्त करने के लिए inputView को ओवरराइड भी कर सकते हैं। अन्यथा कुछ भी नहीं होगा।

+0

स्क्रीन पर कीबोर्ड देखने के लिए मुझे 'inputView' में क्या लौटना चाहिए? टिप्पणी के लिए – derpoliuk

+0

@derpoliuk धन्यवाद। मेरी गलती, यह जांच नहीं की कि UIKeyboard क्लास एक निजी एपीआई है। –

+0

तो 'UILabel' पहले उत्तरदाता बनने के बाद स्क्रीन पर कीबोर्ड प्राप्त करने का कोई तरीका नहीं है? मैं Viber या टेलीग्राम व्यवहार की नकल करने की कोशिश कर रहा हूं, जब कीबोर्ड स्क्रीन पर है और चैट संदेश पर लंबे समय तक दबाएं 'UIMenuController' दिखाता है। – derpoliuk

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]; 
    } 
संबंधित मुद्दे

 संबंधित मुद्दे