Ios UITextField setInputAccessoryView在ShouldChangeCharactersRange方法中
我正在尝试在Ios UITextField setInputAccessoryView在ShouldChangeCharactersRange方法中,ios,objective-c,xcode,uitextfield,Ios,Objective C,Xcode,Uitextfield,我正在尝试在shouldChangeCharactersInRange方法中设置InputAccessoryView。但它不起作用。我只能在textfielddebeginediting -(void)textFieldDidBeginEditing:(UITextField *)textField { [textField setInputAccessoryView:tableView]; } 我希望AccessoryView仅在用户键入内容时显示,而不只是在用户点击UIT
shouldChangeCharactersInRange
方法中设置InputAccessoryView。但它不起作用。我只能在textfielddebeginediting
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
[textField setInputAccessoryView:tableView];
}
我希望AccessoryView仅在用户键入内容时显示,而不只是在用户点击UITextField
textfielddebeginediting
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
[textField setInputAccessoryView:tableView];
}
有办法做到这一点吗?我能做些变通吗
非常感谢您的帮助。谢谢您可以将目标添加到文本字段,如下所示
[your_textField addTarget:tableView action:@selector(textFieldValueChanged:) forControlEvents:UIControlEventEditingChanged];
这里的
textFieldValueChanged:
是一种自定义方法,您可以在其中为表视图实现进一步的代码我没有使用UITableView
运行测试,但我尝试在textfield:shouldChangeCharactersInRange:replacementString:
中将UIToolbar
设置为输入附件视图成功的您需要一个标记来跟踪是否显示附件视图,这样您就不会多次运行设置代码。只有当键盘即将出现时,才会检查输入附件视图的存在,因此你必须跳一支舞,在那里你辞职,然后成为第一响应者。此外,为了在第一次键盘点击后立即显示输入附件视图,您必须重新显示文本字段
- (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
。然后,在文本字段委托方法中,您可以简单地设置标志并取消隐藏输入附件视图,而无需执行辞职/成为第一响应者舞蹈。如果符合您的目的,您可以使用自定义的文本字段didchange:
方法,而不是使用shouldChangeCharactersInRange
。查看我的答案以了解如何操作。@n00bProgrammer textfielddichange:method仍然不显示AccessoryView。当用户键入但AccessoryView不显示时,它会输入if语句。。。