shouldChangeCharactersInRange方法中的UITextField setInputAccessoryView

时间:2014-08-22 12:37:18

标签: ios objective-c xcode uitextfield

我在setInputAccessoryView方法中尝试shouldChangeCharactersInRange。但它不起作用。我只能在textFieldDidBeginEditing

中使用它

我希望AccessoryView仅在用户输入内容时显示,而不是仅在用户点按UITextField时显示

我目前在textFieldDidBeginEditing

中的代码
-(void)textFieldDidBeginEditing:(UITextField *)textField
{

        [textField setInputAccessoryView:tableView];
}

有办法做到这一点吗?我可以做一些解决方法吗?

非常感谢任何帮助。感谢

2 个答案:

答案 0 :(得分:0)

您可以将目标添加到文本字段,如下所示

[your_textField addTarget:tableView action:@selector(textFieldValueChanged:) forControlEvents:UIControlEventEditingChanged];

此处textFieldValueChanged:是自定义方法,您将在其中实现表格视图的更多代码

答案 1 :(得分:0)

我没有使用UITableView进行测试,但我确实尝试在UIToolbar中将textfield:shouldChangeCharactersInRange:replacementString:设置为输入附件视图并且成功了。您将需要一个标记来跟踪附件视图是否显示,因此您不会多次运行设置代码。只有当键盘即将呈现时才会检查输入附件视图的存在,因此您必须在您辞职的舞蹈中进行跳舞,然后成为第一个响应者。此外,为了在第一次键盘敲击后立即显示输入附件视图,您必须重新显示文本字段。

- (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
{

    if (!self.accessoryViewDisplayed) {
        self.accessoryViewDisplayed = YES;

        UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
        toolbar.translucent = NO;
        toolbar.barTintColor = [UIColor greenColor];

        textField.inputAccessoryView = toolbar;
        [textField resignFirstResponder];
        [textField becomeFirstResponder];
        [textField setNeedsDisplay];
    }

    return YES;
}

更新

在进一步考虑之后,您可以在viewDidLoad中配置输入附件视图,并将hidden设置为YES。然后在文本字段委托方法中,您可以简单地设置标记并取消隐藏输入附件视图,而无需执行resign /成为第一响应者舞蹈。