【问题标题】:Custom inputView for UITextField , how do I direct input back to the text field?UITextField 的自定义 inputView ,如何将输入引导回文本字段?
【发布时间】:2012-04-23 05:30:01
【问题描述】:

我为我的UITextField 设置了一个自定义inputView。我需要一种方法来在UITextfield 中显示在我的自定义inputView 中选择的数据。我想以与系统键盘相同的方式实现这一点。

有人知道这是怎么做到的吗?系统键盘如何获得对作为第一响应者的UITextfield 的引用?

【问题讨论】:

  • 请更准确地说,“直接输入回文本字段”是什么意思?你想关注 UITextField 吗?
  • 对不起,我认为我的解释更准确。我的意思是,我将 UITextField 上的 inputView 属性设置为我的自定义输入视图。因此,当用户在我的自定义 inputView 上按下按钮时,我如何获得对作为当前第一响应者的 UITextfield 的引用,以便我可以更改该 UITextfield 的 text 属性以反映用户的输入?

标签: ios cocoa-touch uitextfield first-responder inputview


【解决方案1】:

系统键盘如何获得对作为第一响应者的 UITextfield 的引用?

它只是向系统询问第一响应者;不幸的是,这是一个私有的 UIKit 方法(或者是,上次我检查过)。您可以通过遍历视图层次结构并询问每个视图来找到第一响应者,但这很笨拙。

相反,您可以在输入视图上添加指向文本字段的链接(我假设您的输入视图是自定义 UIView 子类):

@property(nonatomic, assign) UITextField* target;

然后使用视图控制器中的 UITextField 委托方法来查看文本字段何时被聚焦:

- (void)textFieldDidBeginEditing:(UITextField*)textField
{
    if ( [textField.inputView isKindOfClass:[MyInputView class]] )
        ((MyInputView*)textField.inputView).target = textField;
}

- (void)textFieldDidEndEditing:(UITextField*)textField
{
    if ( [textField.inputView isKindOfClass:[MyInputView class]] )
        ((MyInputView*)textField.inputView).target = nil;
}

【讨论】:

  • 很好的答案戴夫,这正是我想要的,谢谢。
【解决方案2】:

当从自定义输入视图将输入发送回文本字段时,请注意您可以(应该)使用UITextField 符合的UIKeyInput 协议方法。即:

- (void)deleteBackward;
- (void)insertText:(NSString *)text;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    相关资源
    最近更新 更多