2011-08-15 16 views
5

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

मूल रूप से मेरे पास कई टेक्स्टफील्ड हैं जो उपयोगकर्ता को एक बटन दबाते समय एक अलग पृष्ठ पर इनपुट जानकारी उत्पन्न करता है। मैं बटन को तब तक अक्षम करना चाहता हूं जब तक कि सभी टेक्स्ट फ़ील्ड जानकारी से भरे न हों।

अब तक मैं इस है:

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    // make sure all fields are have something in them 

if ((textfbookauthor.text.length > 0)&& (textfbookedition.text.length > 0)&& (textfbookplace.text.length > 0)&& (textfbookpublisher.text.length > 0) && (textfbookpublisher.text.length > 0) && (textfbooktitle.text.length > 0) && (textfbookyear.text.length > 0)) { 
     self.submitButton.enabled = YES; 
    } 
    else { 
     self.submitButton.enabled = NO; 
    } 
} 

समस्या है 'submitButton', क्या उसके स्थान पर जाने की जरूरत है एक त्रुटि के साथ आ रहा है? मैंने इसके बजाय बटन 'बुकबटन' डालने की कोशिश की लेकिन यह काम नहीं कर रहा है।

इस बटन

-(IBAction)bookbutton:(id)sender; 
{ 
    NSString* combinedString = [NSString stringWithFormat: 
           @"%@ %@ %@.%@.%@:%@.", 
           textfbookauthor.text, 
           textfbookyear.text, 
           textfbooktitle.text, 
           textfbookedition.text, 
           textfbookplace.text, 
           textfbookpublisher.text]; 
    BookGenerate*bookg = [[BookGenerate alloc] init]; 
    bookg.message = combinedString; 
    bookg.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self presentModalViewController:bookg animated:YES]; 
    [BookGenerate release]; 
} 

'उत्पन्न' के लिए किसी को भी जानता है अगर मैं यह कैसे काम या क्या मैं जोड़ने के लिए कृपया मदद की जरूरत कर सकते हैं मेरे कार्य है।

धन्यवाद अग्रिम

उत्तर

25

जाँच करने के लिए हर UITextField के लिए एक आउटलेट करें और बनाने के एक IBAction ऐसा कर सकते हैं:

IBOutlet UITextField *textField1; 
IBOutlet UITextField *textField2; 
IBOutlet UITextField *textField3; 
IBOutlet UIButton *button 

- (IBAction)editingChanged; 

कनेक्ट सभी दुकानों और IBAction कनेक्ट संपादन के साथ प्रत्येक टेक्स्टफील्ड में:

- (IBAction)editingChanged { 
    if ([textfield1.text length] != 0 && [textfield2.text length] != 0 && [textfield3.text length] != 0) { 
     [button setEnabled:YES]; 
    } 
    else { 
     [button setEnabled:NO]; 
    } 
} 

ध्यान दें कि आपका भी उपयोग कर सकते हैंऔर उसके सामने एक ! डाल (! का अर्थ है 'नहीं') खाली textfield समझते हैं, और कहने के लिए 'अगर पाठ फ़ील्ड खाली करते है ...'

और:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [button setEnabled:NO]; 
} 
+0

मुझे यह उपलब्ध कराने के लिए बहुत बहुत धन्यवाद, मैं अब इसे आजमाऊंगा – Ayub

+0

अच्छा! इस उत्तर के लिए धन्यवाद। UITextView का उपयोग करते समय [यह] (http://stackoverflow.com/a/35674334/3411787) आज़माएं। –

1

में आप "पाठ फ़ील्ड रेंज में chracters बदलना चाहिए" का उपयोग करना चाहिए (uitextviewdelegate के लिए सेब डॉक्स देखें)। क्योंकि यह उपयोगकर्ता प्रकार की जानकारी के रूप में अपडेट होता है। "टेक्स्टफील्ड ने अंत संपादन किया" केवल तभी आग लगती है जब उपयोगकर्ता टेक्स्टफील्ड को संपादित करना बंद कर देते हैं या एंटर दबाते हैं। ज्यादातर मामलों में, कोई अंतिम फ़ील्ड भर देगा और वहां बैठे कर्सर को छोड़ देगा और बटन को सक्षम होने की उम्मीद है ... लेकिन यह "टेक्स्टफील्ड अंत संपादन" का उपयोग करके नहीं होगा क्योंकि उन्होंने इनपुट दर्ज किया था।

आप भी अपनी ज में लंबाई

if([self.textfiele.text isEqualToString:@""]) 
+0

संबद्ध है अगर आप समय तुम मुझे एक उदाहरण दे सकता है तो कृपया है? मैं हर जगह पढ़ने की कोशिश कर रहा हूं और कई अलग-अलग उदाहरणों की कोशिश कर रहा हूं लेकिन इसे काम करने के लिए प्रतीत नहीं होता – Ayub

1

इसके अलावा प्रत्येक UITextField के लिए आईबीओटलेट रखने के लिए, आईबीओलेटलेट कोलेक्शन घोषित करने में मददगार हो सकता है जिसमें एक सरणी में सभी 3 टेक्स्ट फ़ील्ड शामिल हैं।

@property (nonatomic, retain) IBOutletCollection(UITextField) NSArray *textFields;

फिर अपने कार्यान्वयन सिर्फ @synthesize textFields में

और आप कर सकते हैं जल्दी से पाश पाठ फ़ील्ड यह होता है, पाठ के लिए जाँच।

- (IBAction)editingChanged 
{ 
    BOOL buttonShouldBeEnabled = YES; 

    for (UITextField *field in self.textFields) 
     if (!field.text.length) 
      buttonShouldBeEnabled = NO; 

    button.enabled = buttonShouldBeEnabled; 
} 
+0

मैक्सर्स उत्तर की तुलना में इसका क्या फायदा है? – Ayub

+0

जिस तरह से आप जानते हैं कि मैं अन्य xib पर टेक्स्टफ़ील्ड के 2 जेनरेट कैसे उत्पन्न कर सकता हूं जब मैं जेनरेट बटन पर क्लिक करता हूं? मेरी पहली पोस्ट से पता चलता है कि मैं अन्य xib पर सभी टेक्स्टफील्ड कैसे उत्पन्न करता हूं लेकिन कहता है कि मैं बस ऊपर टेक्स्टफबुकप्लेस एन टेक्स्टफबुकियर आउटपुट करना चाहता हूं, क्या आप जानते हैं कि मैं इसे कैसे कर सकता हूं? मैंने प्रारूप के साथ एक और nsstring बनाने की कोशिश की और यह काम नहीं लग रहा है। – Ayub

6

आप एक बटन है और आप अगर वहाँ किसी पाठ फ़ील्ड या TextView में एक पाठ है केवल उसे सक्षम करना चाहते हैं, तो विधि का पालन

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{  
    if (textView.text.length > 1 || (text.length > 0 && ![text isEqualToString:@""])) 
    { 
     self.button.enabled = YES; 
    } 
    else 
    { 
     self.button.enabled = NO; 
    } 

    return YES; 
} 
2

कुछ समाधान के रूप में अच्छी तरह से इन पदों पर उपलब्ध हैं लागू

यहाँ कुंजी उपयोग कर रहा है (विस्तार) UITextFieldDelegate वर्ग और यह समारोह

//Need to have the ViewController extend UITextFieldDelegate for using this feature 
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

    // Find out what the text field will be after adding the current edit 
    let text = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: string) 

    if !text.isEmpty{//Checking if the input field is not empty 
     button.userInteractionEnabled = true //Enabling the button 
    } else { 
     button.userInteractionEnabled = false //Disabling the button 
    } 

    // Return true so the text field will be changed 
    return true 
} 
संबंधित मुद्दे