2012-01-09 12 views
18

मैं टेक्स्ट दर्ज करने के लिए एक कस्टम इंटरफ़ेस के साथ एक एप्लिकेशन बना रहा हूं, और प्रदर्शन के लिए UILabel का उपयोग कर रहा था। यह तब उपयोगकर्ता के लिए टेक्स्ट कॉपी और पेस्ट करने में सक्षम होने के लिए आवश्यक हो गया, इसलिए मैं एक यूआईटीएक्स्टफाल्ड के साथ गया।कोई कीबोर्ड के साथ UITextField कार्यक्षमता

मेरी समस्या यह है कि मैं यह नहीं समझ सकता कि चयन, प्रतिलिपि, पेस्ट इत्यादि की अनुमति देने के लिए UITextField कैसे प्राप्त करें, लेकिन फ़ील्ड का चयन होने पर कोई कीबोर्ड प्रदर्शित नहीं होता है।

मैंने इस तरह की कई पोस्ट पढ़ी हैं लेकिन कोई भी बिल्कुल वही बात नहीं पूछता है, न ही मेरे लिए कोई भी समाधान काम करता है। मैंने फ़ील्ड को गैर-संपादन योग्य बनाने की कोशिश की है, जो कुंजीपटल को आने से रोकता है, लेकिन कॉपी और पेस्ट करने की अनुमति भी नहीं देता है। मैंने यूआईटीएक्स्टफिल्ड को उपclassing का सुझाव देने वाली टिप्पणियां भी पढ़ी हैं, लेकिन मैंने जो भी पढ़ा है, उसने ठोस उदाहरण दिए हैं।

क्या मैं बस इतना करना चाहता हूं, या मुझे कीबोर्ड, या अन्य विकल्पों के लिए कस्टम व्यू बनाने का मार्ग जाने की आवश्यकता है?

धन्यवाद, एंड्रयू

समाधान:

अंत में, मैं एक और इसी तरह (लेकिन सटीक नहीं) प्रश्न यहाँ stackoverflow पर खोज की, और एक ही जवाब मेरी समस्या का समाधान दे दी है। इसके बारे में जाने का तरीका बस ऐप को कीबोर्ड के रूप में एक डमी व्यू प्रदर्शित करना है, और बाकी सब कुछ जिस तरह से करना चाहिए।

UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];  
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor 

यह यूआईटीएक्स्टफिल्ड और यूआईटीएक्स्टव्यू के लिए काम करता है और उन्हें संपादन योग्य पर सेट करने की आवश्यकता है।

उत्तर

24

समाधान:

अंत में, मैं एक और इसी तरह (लेकिन सटीक नहीं) प्रश्न यहाँ stackoverflow पर खोज की, और एक ही जवाब मेरी समस्या का समाधान दे दी है। इसके बारे में जाने का तरीका बस ऐप को कीबोर्ड के रूप में एक डमी व्यू प्रदर्शित करना है, और बाकी सब कुछ जिस तरह से करना चाहिए।

UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];  
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor 

यह UITextField और UITextView के लिए काम करता है और वे संपादन योग्य करने के लिए सेट किया जाना चाहिए।

+0

यदि आप इसे आईओएस 7 में करते हैं, तो आपको इस सवाल के रूप में एक सफेद रेखा मिलती है http://stackoverflow.com/questions/20946524/white-line-on-the-bottom-on-ios-7-with-uitextfield .oo आप इसके लिए समाधान जानते हैं? – deltaaruna

+1

ऐसा लगता है कि किसी ने उस प्रश्न का उत्तर दिया है, यह सुझाव देता है कि 1 पिक्सेल आयत समस्या है, और इससे इसे हल हो सकता है: CGRectMake (0, 0, 0, 0)। शून्य फ्रेम के साथ दृश्य बनाने के लिए –

+0

यू [UIView नया] का उपयोग कर सकता है। – Dren

1

इसे एक UITextView बनाएं, और UITextView को संपादन योग्य बनाएं। वह अभी भी प्रतिलिपि बनाने की अनुमति देगा।

संपादित करें: हाँ मेरा बुरा मैं उस भाग को भूल गया ... असल में आपने जो किया वह स्क्रोल करने योग्य लेबल बना था।

यदि आप कीबोर्ड के बिना सभी कार्यक्षमता चाहते हैं, तो आपको इसे संपादन योग्य बनाना होगा, और UITextFieldDelegate के -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField को return NO संपादित करना होगा। यह कुंजीपटल आने से अवरुद्ध करेगा।

+1

धन्यवाद समय नहीं है। वह चाल है। बहुत सारी खोज के बाद बहुत सराहना की गई और यूआईटीएक्स्टव्यू को इंगित करने के लिए मुझे कुछ भी नहीं मिला। –

+0

जब मैंने पहली बार इसे लागू किया, मैंने सोचा कि यह ठीक था। अब, हालांकि, जब मैं फिर से देखता हूं, तो मैं केवल कॉपी करने में सक्षम हूं। पेस्ट की अनुमति नहीं है, शायद इसलिए कि यह एक संपादन है। कोई अन्य विचार? –

+0

ऊपर संपादित ... – DGund

9

लेखक का कोड ...

UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];  
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor 

(जहाँ 'VIN' UITextField चर रहा है, और इस कोड कहीं viewDidLoad की तरह में रखा गया है)

... iPhone को रोकने के लिए काम करता है प्रदर्शित करने के लिए/आईपैड पॉपअप कीबोर्ड।

हालांकि, यह एक कीबोर्ड इंटरफ़ेस का 'प्रदर्शन' भाग है। यदि आपके पास ऐप्पल के भौतिक आईफोन/आईपैड कीबोर्ड जैसे बाहरी कीबोर्ड संलग्न हैं जो 30-पिन या ज़िलियन ब्लूटूथ सक्षम कीबोर्ड (या सिम्युलेटर के साथ मैक कीबोर्ड का उपयोग करके) में प्लग करते हैं, तो उपयोगकर्ता अभी भी बिना फ़ील्ड में टाइप कर सकता है प्रदर्शित कीबोर्ड पॉपअप प्रदर्शित करें।

इसके अलावा, यहां तक ​​कि कोई भी कीबोर्ड पॉपअप दिखाए जाने के बावजूद, उपयोगकर्ता अभी भी पेस्ट-बोर्ड से क्षेत्र में डबल-स्पर्श करके और PASTE चुनकर मैदान में पेस्ट करने में सक्षम होगा।

निम्नलिखित अतिरिक्त कोड उपयोग किए जाने से उन कुंजीपटल होने से बचाता है और पेस्ट के रूप में अच्छी तरह से रोकता है:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSLog(@"myXViewController shouldChangeCharactersInRange"); 
    return FALSE; 
} 

...और अभी भी चयन की अनुमति देता है, लेकिन क्षेत्र में पाठ का संपादन नहीं करता है।

+1

बाहरी कीबोर्ड के बारे में अच्छी बात - निश्चित रूप से कुछ मामलों में एक विचार। पेस्ट कार्यक्षमता के लिए, यह प्रश्न का पूरा बिंदु था - कीबोर्ड को छुपाने के लिए और अभी भी कॉपी/पेस्ट फ़ंक्शंस को अनुमति दें। –

+0

धन्यवाद, ** जहां 'वीआईएन' यूआईटीएक्स्टफाल्ड वैरिएबल है, और यह कोड कहीं भी देखने के लिए हैडलोड लोड) ** !! – rptwsthi

0

मैं प्रतिनिधि विधि में [textfield resignFirstResponder] उपयोग कर रहा हूँ - (void)textFieldDidBeginEditing:(UITextField *)textField इस तरह:

-(void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    if (textField == yourTextField){ 
     [yourTextfield resignFirstResponder]; 
    } 
} 

तो कीबोर्ड सिर्फ प्रकट करने के लिए

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

  • कोई संबंधित समस्या नहीं^_^