2013-02-08 18 views
6

ध्यान दें! यह प्रश्न this या this प्रश्न का डुप्लिकेट नहीं है! चीजों को और स्पष्ट करने के लिए यह एक नया सवाल है।UITextField में बैकस्पेस का पता लगाने का सही तरीका

इसलिए मैंने उपरोक्त पदों के सभी निर्देशों का पालन किया है और मेरे पास यह UITextField है जो खाली हो जाता है और जब भी उपयोगकर्ता वापसी बटन हिट करता है तो एक नई स्थिति में जाता है। इसके अलावा, मैं TextView के इनपुट का पता लगाने और मैं स्थिति TextView था कि पाठ का एक लेबल बनाने, इस तरह:

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

    if (textField.text.length > 5) { 
     CGRect labelFrame = CGRectMake(textField.frame.origin.x, textField.frame.origin.y, 0, 0); 
     UILabel *label = [[UILabel alloc] initWithFrame: labelFrame]; 
     label.font = [UIFont fontWithName:@"HelveticaNeue" size:14]; 
     [label setText:textField.text]; 
     [label setTextColor: [BSFunctions getColorFromHex:@"3f3f3f"]]; 
     label.backgroundColor =[UIColor lightGrayColor]; 
     [label sizeToFit]; 
     [labelsArray addObject:label]; 
     [self.view addSubview: label]; 

     CGRect newTextFieldFrame = CGRectMake(labelFrame.origin.x + label.frame.size.width + 5, labelFrame.origin.y, 320, 30); 
     NSLog(@"Rect is %@", NSStringFromCGRect(newTextFieldFrame)); 
     textField.frame = newTextFieldFrame; 
     textField.text = @"\u200B"; 
    }  
    return YES; 
} 

मैं @"\u200B" होने की UITextField पाठ में टेक्स्ट सेट और मैं तो पता लगाने के लिए चाहते हैं इस तरह उस पर बैकस्पेस बटन:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 

    if ([string isEqualToString:@""]) { 
     NSLog(@"backspace button pressed"); 

     if (labelsArray.count > 0) { 
      UILabel *labelToDelete = [labelsArray lastObject]; 
      CGRect labelPosition = labelToDelete.frame; 
      CGRect oldPosition = textField.frame; 
      textField.frame = CGRectMake(labelPosition.origin.x, labelPosition.origin.y, oldPosition.size.width, oldPosition.size.height); 
      [labelToDelete removeFromSuperview]; 
      [labelsArray removeLastObject]; 
      textField.text = @"\u200B"; 
     } 
    } 

    return YES; 
} 

लेकिन समस्या यह है कि यह केवल एक बार और फिर, विशेष वर्ण भी साथ textfield यह काम नहीं करता की शुरुआत में जोड़ा काम करता है, है। संभवतः गलत क्या है? shouldChangeCharactersInRange: replacementString:

उत्तर

6

पाठ फ़ील्ड में

textField.text = @"\u200B"; 

स्थापित करने के बाद

आप

return NO; 

अन्यथा यह वापसी हाँ करने के लिए जारी है और एक से प्रतिस्थापित कर देगा जोड़ना होगा @ "" और फिर बैकस्पेस दबाकर एक बार फिर कुछ भी नहीं बदला जाएगा और प्रतिनिधि विधि को नहीं बुलाया जाएगा।

यह संभव है कि मैंने यहां आपके लक्ष्य को गलत समझा, लेकिन मुझे आशा है कि इससे मदद मिलेगी।

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