2010-07-27 14 views
6

को खारिज नहीं करता है मैंने इस साइट के माध्यम से खोज की है कि मुझे अब जिस समस्या का सामना करना पड़ रहा है उसका समाधान नहीं मिला। उम्मीद है कि कोई मदद कर सकता है।ResignFirstResponder कीबोर्ड (आईफोन)

मैंने यूआईएल ऐप में अपना नाम दर्ज करने के लिए उपयोगकर्ता को संकेत देने के लिए एक यूआईएलर्टव्यू व्यू बनाया है।

UIAlertView *enterNameAlert = [[UIAlertView alloc] initWithTitle:@"Enter your name" 
                  message:@"\n\n\n" 
                  delegate:self 
                cancelButtonTitle:NSLocalizedString(@"Cancel", nil) 
                otherButtonTitles:NSLocalizedString(@"OK", nil),nil]; 

    UITextField *enterNameField = [[UITextField alloc] initWithFrame:CGRectMake(16, 83, 252, 25)]; 
    enterNameField.keyboardAppearance = UIKeyboardAppearanceAlert; 
    enterNameField.borderStyle = UITextBorderStyleRoundedRect; 
    enterNameField.autocorrectionType = UITextAutocorrectionTypeNo; 
    enterNameField.clearButtonMode = UITextFieldViewModeWhileEditing; 
    enterNameField.returnKeyType = UIReturnKeyDone; 
    enterNameField.delegate = self; 
    [enterNameField becomeFirstResponder]; 
    [enterNameAlert addSubview:enterNameField]; 

    [enterNameAlert show]; 
    [enterNameAlert release]; 
    [enterNameField release]; 

मैं सेटअप हेडर फाइल में UITextFieldDelegate के साथ पालन करने के लिए इस ViewController करती हैं, और textFieldShouldReturn: कार्यान्वित कीबोर्ड ख़ारिज करने के लिए जब उपयोगकर्ता हिट हो गया कोशिश कर रहा।

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    if ([textField isFirstResponder]) { 
     [textField resignFirstResponder]; 
     NSLog(@"text field was first responder"); 
    } else { 
     [textField becomeFirstResponder]; 
     [textField resignFirstResponder]; 
     NSLog(@"text field was not first responder"); 
    } 
    NSLog(@"textfieldshouldreturn"); 
    return YES; 
} 

डिबगर में, मैं इस बात की पुष्टि है कि इस विधि कहा जाता है सफलतापूर्वक जब मैं ठीक है बटन पर नल पाठ फ़ील्ड उस समय पहले प्रत्युत्तर होने के साथ। हालांकि, कीबोर्ड दूर नहीं जाता है, लेकिन थोड़ा स्पष्ट बटन दूर चला जाता है। यह स्पष्ट है कि टेक्स्टफ़िल्ल्ड अब पहला प्रतिसादकर्ता नहीं है क्योंकि जब मैं फिर से संपन्न बटन पर क्लिक करता हूं, तो कुछ भी नहीं कहा जाता है। मैं बस पूर्ण बटन के साथ कीबोर्ड को खारिज करना चाहता हूं। क्या कोई समाधान दे सकता है? ढेर सारा धन्यवाद।

+0

क्या होता है यदि आप टेक्स्ट फ़ील्ड को अपने व्यू कंट्रोलर में एक संपत्ति के रूप में सेट करते हैं, जिससे यह सुनिश्चित हो जाता है कि अलर्ट को खारिज कर दिए जाने के बाद भी आपको इसे बनाए रखा गया है? मैं सोच रहा हूं कि अगर इवेंट लूप इस्तीफा भेजने के लिए आसपास हो जाता है तो शायद इसे हटा दिया जा रहा है फर्स्ट रेस्पॉन्डर संदेश या उस तरह अजीब कुछ। पीएस क्या हम साथ मिलकर काम करते थे? – clozach

उत्तर

6

सबसे पहले आपको इंटरफेस हेडर में अपने enterNameAlert को परिभाषित करने की आवश्यकता है। फिर नीचे कोड का उपयोग करें।

- (void)viewDidLoad {  
    [super viewDidLoad]; 
    enterNameAlert = [[UIAlertView alloc] initWithTitle:@"Enter your name" 
                  message:@"\n\n\n" 
                  delegate:self 
                cancelButtonTitle:NSLocalizedString(@"Cancel", nil) 
                otherButtonTitles:NSLocalizedString(@"OK", nil),nil]; 

    UITextField *enterNameField = [[UITextField alloc] initWithFrame:CGRectMake(16, 83, 252, 25)]; 
    enterNameField.keyboardAppearance = UIKeyboardAppearanceAlert; 
    enterNameField.borderStyle = UITextBorderStyleRoundedRect; 
    enterNameField.autocorrectionType = UITextAutocorrectionTypeNo; 
    enterNameField.clearButtonMode = UITextFieldViewModeWhileEditing; 
    enterNameField.returnKeyType = UIReturnKeyDone; 
    enterNameField.delegate = self;  
    [enterNameAlert addSubview:enterNameField]; 
    [enterNameField becomeFirstResponder]; 
    [enterNameAlert show];  
    [enterNameField release]; 
} 

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    if ([textField isFirstResponder]) { 
     [textField resignFirstResponder]; 
     [enterNameAlert dismissWithClickedButtonIndex:1 animated:YES]; 
     [enterNameAlert release]; 
     NSLog(@"text field was first responder"); 
    } else { 
     [textField becomeFirstResponder]; 
     [textField resignFirstResponder]; 
     NSLog(@"text field was not first responder"); 
    } 
    NSLog(@"textfieldshouldreturn"); 
    return YES; 
} 
+0

यह काम करता है !! लेकिन मुझे - (BOOL) टेक्स्ट फ़ील्डशल्डरेटर्न से (enterNameAlert रिलीज] को हटाना होगा: (UITextField *) textField विधि। अन्यथा, ऐप बस क्रैश हो जाएगा और मैं पूर्ण बटन क्लिक करने के बाद छोड़ दूंगा। लेकिन मैं स्मृति सामान से वास्तव में परिचित नहीं हूँ। ऐसा करके कोई स्मृति रिसाव होगी? – Anthony

+0

यदि आप textFieldShouldReturn के भीतर enterNameAlert को रिलीज़ नहीं करना चाहते हैं। ठीक है। लेकिन आपको इसे कार्यान्वयन के अंदर कहीं और छोड़ना होगा। मान लें: -dealloc { [enterNameAlert रिलीज]; [सुपर डेलोक]; } –

+0

हम्म, [मेरे लिए काम नहीं कर रहा] (http://stackoverflow.com/q/6866932/434423)। –

0

अगर आप इस्तीफा देने के बाद टेक्स्ट फ़ील्ड को रिलीज करने के बाद टेक्स्ट फ़ील्ड को रिलीज करने के लिए क्या करते हैं तो क्या होता है। फर्स्ट रेस्पॉन्डर विधि?

+0

आपकी मदद के लिए धन्यवाद। लेकिन यह काम नहीं करता है। – Anthony

0

अपने टेक्स्ट फ़ील्ड के "DidEndOnExit" ईवेंट पर इस्तीफा देने के लिए कीबोर्ड को खारिज करने का प्रयास करें।

फिर कीबोर्ड पर पूर्ण बटन दबाकर कीबोर्ड को खारिज करने का प्रयास करें जब आपने अपने टेक्स्टफ़िल्ल्ड में डेटा दर्ज करना समाप्त कर दिया हो।

उम्मीद है कि इससे मदद मिलती है।

+0

पर लागू resignFirstResponder - (IBAction) DidEndOnExit: (आईडी) इस { // आपकी संहिता यहां आएगा } –

+0

इस ऊपर समाधान सहायता मिली? –

+0

आपकी मदद के लिए धन्यवाद। लेकिन यह काम नहीं करता है। – Anthony

0

कोई अन्य वस्तु बन गई है और फिर तुरंत पहले उत्तरदाता को इस्तीफा दे दिया है।

+0

क्षमा करें, मुझे यकीन नहीं है कि मैं इसे कैसे प्राप्त कर सकता हूं। – Anthony

0

बस

[mytextField addTarget:self 
      action:@selector(methodToFire:) 
      forControlEvents:UIControlEventEditingDidEndOnExit]; 
0

कर अगर कोई स्टोरीबोर्ड में इस के साथ परेशानी हो रही है मैं सभी स्टोरीबोर्ड में और है कि मेरे uitextfields गुण और ctrl + उसकी जड़ दृश्य नियंत्रक करने के लिए अपने प्रतिनिधि से खींचें में जाना पड़ा निश्चित सब कुछ ..