Chú ý! Câu hỏi này không trùng lặp với câu hỏi this hoặc this! Đây là một câu hỏi mới để làm cho mọi thứ rõ ràng hơn.Phát hiện backspace trong UITextField đúng cách
Vì vậy, tôi đã làm theo tất cả các hướng dẫn của bài viết ở trên và tôi có điều này UITextField
trở nên trống và di chuyển đến vị trí mới mỗi lần người dùng nhấn nút trả về. Hơn nữa, tôi theo dõi các đầu vào của TextView và tôi tạo ra một nhãn văn bản mà ở vị trí TextView là, như thế này:
- (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;
}
tôi đặt văn bản trong UITextField
văn bản để được @"\u200B"
và sau đó tôi muốn phát hiện nút backspace trên nó như thế này:
- (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;
}
Nhưng vấn đề là, nó hoạt động chỉ lần và sau đó, ngay cả với các ký tự đặc biệt thêm vào đầu của TextField nó không hoạt động. Điều gì có thể sai?