注意!此问题与this或this问题不重复!这是一个让事情变得更加清晰的新问题。
所以我已按照上述帖子的所有说明进行操作,并且每次用户点击返回按钮时,此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;
}
我将UITextField
文本中的文字设置为@"\u200B"
然后我想要检测其上的退格按钮:
- (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的开头添加了特殊字符,它也不起作用。可能有什么问题?
答案 0 :(得分:6)
设置
后textField.text = @"\u200B";
TextField中的:shouldChangeCharactersInRange:replacementString:
您必须添加
return NO;
否则它将继续返回YES并用@“”替换它,然后当再次按下退格键时,将不会更改任何内容,并且不会调用委托方法。
我可能在这里误解了你的目标,但我希望这会有所帮助。