2013-02-08 15 views
6

Dikkat! Bu soru this veya this sorularının bir kopyası değil! Bu, işleri daha net hale getirmek için yeni bir sorudur.UITextField öğesinde backspace'ı doğru şekilde saptamak

Bu yüzden yukarıdaki yazıların tüm yönergelerini takip ettim ve bu UITextField'u boş bırakıyor ve kullanıcı geri dönüş düğmesine her bastığında yeni bir konuma geçiyor. Üstelik ben TextView'un girişini izlemek ve böyle, TextView'un oldu pozisyonda bu metnin bir etiket oluşturun:

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

Ben @"\u200B" olmak UITextField metinde metni ayarlayın ve ardından algılamak istiyorum böyle üzerinde geri silme düğmesi:

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

Ama sorun sadece özel karakter çalışmıyor TextField başında eklenen bile, sonra kez ve çalışır olduğunu. Muhtemelen yanlış olan nedir? shouldChangeCharactersInRange: replacementString:

cevap

6

TextField içinde

textField.text = @"\u200B"; 

ayarladıktan sonra

aksi halde

return NO; 

o EVET dönüş devam ve bir ile değiştirecektir eklemek zorunda kalacak @ "" ve bir kez daha geri tuşuna basıldığında bir şey değişmeyecek ve temsilci yöntemi çağrılmayacak.

Buradaki amacınızı yanlış anlamış olabilirim, ama umarım bu yardımcı olur.

İlgili konular