2013-02-08 12 views
6

Achtung! Diese Frage ist kein Duplikat von this oder this Frage! Dies ist eine neue Frage, um die Dinge klarer zu machen.Rücktaste in UITextField richtig erkennen

Also ich habe alle Anweisungen der oben genannten Beiträge befolgt und ich habe diese UITextField, die leer wird und jedes Mal an eine neue Position bewegt, wenn der Benutzer die Zurück-Taste drückt. Darüber hinaus verfolgen ich die Eingabe des Textview und ich schaffe ein Etikett dieser Text in der Position der Textview war, wie folgt aus:

- (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; 
} 

ich den Text in UITextField Text festgelegt, dass @"\u200B" und ich möchte dann erkennen, die Rücktaste auf es wie folgt aus:

- (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; 
} 

Aber das Problem ist, es funktioniert nur einmal und dann auch mit den Sonderzeichen am Anfang der Textfield fügte hinzu, es funktioniert nicht. Was ist möglicherweise falsch?

Antwort

6

Nach der Einstellung

textField.text = @"\u200B"; 

in textfield: shouldChangeCharactersInRange: replacementString:

Sie

return NO; 

sonst hinzuzufügen haben es auf die Rückkehr weiter JA und ersetzen Sie es durch ein @ "" und dann wird beim erneuten Drücken der Rücktaste nichts geändert und die Delegate-Methode wird nicht aufgerufen.

Es ist möglich, dass ich Ihr Ziel hier missverstanden habe, aber ich hoffe, das hilft.

Verwandte Themen