Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITextField setInputAccessoryView在ShouldChangeCharactersRange方法中_Ios_Objective C_Xcode_Uitextfield - Fatal编程技术网

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语句。。。