【问题标题】:UITextFieldDelegate stops working after first activation of UITextFieldUITextFieldDelegate 在第一次激活 UITextField 后停止工作
【发布时间】:2011-05-14 14:36:24
【问题描述】:

我在这里制作了一个 UITextField:

text_field = [[UITextField alloc] initWithFrame:CGRectMake(10, 8, 260, 40)];
text_field.delegate = [[MessageInputDelegate alloc] init];

委托实现:

@implementation MessageInputDelegate

- (BOOL) textFieldShouldReturn: (UITextField *) text_field{
    [the_view5 becomeFirstResponder];
    the_view5->text_area.frame = CGRectMake(20, 320, 280, 40);
    the_view5->message_label.frame = CGRectMake(0, 0, 320, 320);
    text_field.enabled = NO;
    text_field.text = @"";
    return YES;
}

- (void) textFieldDidBeginEditing: (UITextField *) textField{
    printf("DID CALL EDIT METHOD\n");
    the_view5->text_area.frame = CGRectMake(20, 140, 280, 40);
    the_view5->message_label.frame = CGRectMake(0, 0, 320, 140);
}

- (BOOL) textField: (UITextField *) textField shouldChangeCharactersInRange: (NSRange) range replacementString: (NSString *) string{
    if (textField.text.length >= 400 && range.length == 0){
        return NO;
    }
    return YES;
}

@end

第一次激活文本字段时它有效,但第二次无效...?

谢谢。

【问题讨论】:

  • 您是否在您的MessageInputDelegate 中创建text_field
  • 不,你看到的代码就是它的代码。
  • text_field.enabled = NO 看起来像个嫌疑人。
  • 是的,就是这样。我之前在以编程方式激活文本字段时使用过它,当我允许手动输入时我感到困惑。

标签: objective-c ios uikit uitextfield uitextfielddelegate


【解决方案1】:

如果你是从 MessageInputDelegate 那里获得 text_field,你应该使用

text_field.delegate = self;

并为两个 UITextFields 声明委托。


如果你从其他类创建它,你应该在你的 .h 文件中的某处声明一个 MessageInputDelegate 实例,例如

MessageInputDelegate *mid;

然后

text_field.delegate = mid;

【讨论】:

  • 谢谢,但我保留了我所做的课程中的代表,但仍然失败。
【解决方案2】:

我使用 endEditing 关闭键盘,它可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-25
    • 2016-01-14
    • 2018-01-05
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多