2009-05-14 17 views
5

में मैग्निफाइंग ग्लास को अक्षम करें क्या उपयोगकर्ता को कर्सर को UITextField में स्थानांतरित करने से रोकने का कोई तरीका है? मैं इसे स्ट्रिंग के अंत में रहना चाहता हूं।UITextField

उत्तर

1

कर्सर को स्थानांतरित करने से रोकने के लिए कोई रास्ता नहीं है। हालांकि, आप उन्हें अंत में छोड़कर लेख का संपादन से अपने पाठ क्षेत्र के प्रतिनिधि में

– textField:shouldChangeCharactersInRange:replacementString:

विधि को लागू करने से रोका जा सकता है।

संपादित करें: आप userInteractionEnabled को NO पर भी सेट कर सकते हैं ताकि उपयोगकर्ता फ़ील्ड को टैप न कर सके। becomeFirstResponder पर मैन्युअल रूप से कॉल करें ताकि फ़ील्ड फोकस हो क्योंकि उपयोगकर्ता फोकस करने के लिए टैप नहीं कर सकता है।

+0

मेरे पास अब यही है, लेकिन जब उपयोगकर्ता कर्सर को ले जाते हैं तो उपयोगकर्ता के लिए थोड़ी सी जीत होती है और फिर एक कुंजी टाइप करें और वर्ण स्ट्रिंग के अंत में संलग्न होते हैं। आदर्श नहीं है ... लेकिन घातक नहीं है। UITextField पर स्पर्श को अक्षम करने का एक आसान तरीका ढूंढ रहे हैं। उपclass मार्ग जा सकते हैं अगर यह मेरा एकमात्र विकल्प है। – Meltemi

+0

क्या मैं पूछ सकता हूं कि आप क्या करने की कोशिश कर रहे हैं? कर्सर रखने की अनुमति क्यों नहीं है? लेकिन हाँ, ऐसा लगता है कि उपयोगकर्ता को स्थापित कर रहा है IteractionEnabled = NO सबसे अच्छा फिक्स होगा। –

0

मुझे नहीं पता कि ऐसा करने का एक अंतर्निहित तरीका है ... शायद आप UITextField को उपclass कर सकते हैं और स्पर्श ईवेंट को स्वयं संभाल सकते हैं?

0

मैं जाँच नहीं की है अगर आप आवर्धक कांच निष्क्रिय कर सकते हैं, लेकिन जिस तरह से सिफारिश की चुनिंदा एक UIResponder (और इस प्रकार एक UITextField) में संपादन व्यवहार को निष्क्रिय करने के UIResponder की canPerformAction:withSender लागू करने के लिए है।

UIResponder documentation देखें।

शायद अगर आप चयन के लिए "नहीं" वापस लौटें और सभी क्रियाएं आप इसे अक्षम कर सकते हैं।

कोई और अधिक क्रूर, तरीका किसी भी स्पर्श ईवेंट को रोकना और कर्सर को अंत में रीसेट करना है।

1

मैं जेस्चर रिकॉग्नाइज़र संपत्ति की जांच करने का सुझाव दूंगा।

आप उन्हें बहुत से सरणी में पाएंगे और शायद उन्हें सभी को हटा दें या उन लोगों को ढूंढें जो उस ईवेंट को ट्रिगर करते हैं जिसे आप अवरुद्ध करना चाहते हैं और इसे हटा/बदलना चाहते हैं।

मैं इसे इस्तेमाल किया एक UITextField

+0

एक्सकोड मुझे बताता है कि यूआईटीएक्स्टफिल्ड को इशारा पहचानकर्ताओं के लिए "आउटलेट संग्रह नहीं है"। – radven

6

यह एक पुरानी सवाल यह है कि से कॉपी/पेस्ट और आवर्धक कांच कार्यक्षमताओं दूर करने के लिए है, लेकिन मैं एक ही प्रश्न का उत्तर के लिए देख रहा था, और एक समाधान मिल गया।

उपयोगकर्ता को कर्सर को स्थानांतरित करने से रोकने के लिए वास्तव में काफी सरल है। बस UITextField उपवर्ग और caretRectForPosition:

- (CGRect)caretRectForPosition:(UITextPosition *)position 
{ 
    return [super caretRectForPosition:self.endOfDocument]; 
} 
+0

मैं इसे जोड़ना चाहता हूं, जबकि यह वास्तव में कैरेट को आगे बढ़ने से रोकता है, हालांकि यह आवर्धक ग्लास को अक्षम नहीं करता है (कम से कम आईओएस 7 में नहीं)। शीर्षक और प्रश्न दोनों अलग-अलग चीजों के लिए पूछ रहे हैं। – iMaddin

1

के निम्नलिखित कार्यान्वयन नहीं उपवर्ग की जरूरत प्रदान करते हैं।

आप UITextFieldDelegate का उपयोग कर सकते हैं। यह अक्षम आवर्धक ग्लास & पाठ चयन कर देगा।

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    textField.userInteractionEnabled = NO; 
    return YES; 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField { 
    textField.userInteractionEnabled = YES; 
} 

एनबी: यह सिर्फ एक बाईपास है।