2011-09-07 6 views
7

मेरे कोड बनाने:inputAccessoryView को पाठ क्षेत्र जोड़ने कैसे करें और TextView पहले प्रत्युत्तर

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    CGRect rectFake = CGRectZero; 

    UITextField *fakeField = [[UITextField alloc] initWithFrame:rectFake]; 

    [self.view addSubview:fakeField]; 

    UIView *av = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 0.0, 39.0)]; 

    av.backgroundColor = [UIColor darkGrayColor]; 

    CGRect rect = CGRectMake(200.0, 4.0, 400.0, 31.0); 

    UITextField *textField = [[UITextField alloc] initWithFrame:rect]; 

    textField.borderStyle = UITextBorderStyleRoundedRect; 

    textField.font = [UIFont systemFontOfSize:24.0]; 

    textField.delegate = self; 

    [av addSubview:textField]; 

    fakeField.inputAccessoryView = av; 

    [fakeField becomeFirstResponder]; 

} 

मैंने कोशिश की अंत में

[textField becomeFirstResponder] 

जोड़ने के लिए है, लेकिन यह कोई काम करता है।

एक और समस्या जो ENTER दबाए जाने पर कीबोर्ड को छुपाने के लिए विधि का प्रतिनिधित्व करती है, वह भी काम नहीं करती है।

- (BOOL) textFieldShouldReturn:(UITextField *)textField { 

    [textField resignFirstResponder]; 

    return YES; 
} 
+0

इस UIView कोशिश * av = [[UIView alloc] initWithFrame: CGRectMake (0.0, 0.0, 320.0, 3 9 .0.0]]; –

+0

क्षमा करें मैंने यह उल्लेख नहीं किया कि यह आईपैड के लिए है और यह दृश्य कुंजीपटल के साथ फैला है, इसलिए चौड़ाई समझ में नहीं आती है। – Michael

उत्तर

13

मुझे एक ही चुनौती का सामना करना पड़ रहा था। आपका (और मेरा प्रारंभिक) दृष्टिकोण संभवतः काम नहीं करता है क्योंकि inputAccessoryView में टेक्स्ट फ़ील्ड पहले प्रतिक्रियाकर्ता बनने से इंकार कर देता है क्योंकि UITextField आपकी स्क्रीन पर प्रारंभ में नहीं है।

मेरा समाधान: कीबोर्ड (और उसके साथ सहायक दृश्य) दिखाई देने पर जांचें!

चरण 1) अधिसूचना के लिए सुनो (सुनिश्चित करें कि अधिसूचना प्राप्त करने से पहले यह कोड निष्पादित किया गया है)।

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(changeFirstResponder) 
              name:UIKeyboardDidShowNotification 
              object:nil]; 

चरण 2) जब कुंजीपटल दिखाई दिया है, तो आप अपने inputAccessoryView में पाठ फ़ील्ड सेट पहले प्रत्युत्तर बनने के लिए कर सकते हैं:

-(void)changeFirstResponder 
{ 
    [textField becomeFirstResponder]; // will return YES; 
} 
+0

मैं वही चीज़ प्राप्त करने की कोशिश कर रहा हूं और आपका विचार लगता है कि यह काम कर सकता है, हालांकि आप कीबोर्ड को पहली जगह कैसे दिखाना चाहते हैं? मेरे पास एक UIButton है जो दबाए जाने पर मुझे एक्सेसरी दृश्य में टेक्स्ट फ़ील्ड के साथ दिखाने के लिए कीबोर्ड की आवश्यकता होती है। – Darren

+0

@ डैरेन मुझे एक अर्ध-गंदे कामकाज पता है और उसके पास पहले से ही आपके वर्तमान दृश्य में एक (छुपा) टेक्स्टफील्ड होना है और '[yourHiddenTextField बनने के लिए फर्स्ट रेस्पॉन्डर]' – Tom

+0

सेट करने के लिए बटन एक्शन का उपयोग करना है, जो वास्तव में मुझे करने की ज़रूरत है। Thx – Darren

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