键入时保持 UIMenuController 可见

Posted

技术标签:

【中文标题】键入时保持 UIMenuController 可见【英文标题】:keep UIMenuController visible while typing 【发布时间】:2014-11-05 15:57:01 【问题描述】:

我想使用 UIMenuController 根据我的应用程序中已有的数据显示文本字段的自动填充选项。更新菜单项并在选择一个时填充文本字段的代码工作正常,但我似乎无法找到一种方法来让菜单控制器在键入时保持可见。我试过了

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
        [[UIMenuController sharedMenuController] setMenuVisible:YES animated:YES];
    return YES;

但这无济于事。如果我将更新菜单项的代码放在设置菜单可见的代码之前,我只会一遍又一遍地替换文本字段中的第一个字母,菜单仍然无法显示。

这里要解决的真正问题可能是 UIMenuController 在显示时自动选​​择文本字段中的最后一个单词,但我也没有找到解决方法。

【问题讨论】:

【参考方案1】:

我一直在想办法做到这一点。假设您的代码通过使视图成为第一响应者来显示 UIMenuController,请添加使菜单在操作块内可见的代码:

[[NSOperationQueue mainQueue] addOperationWithBlock:^ [[UIMenuController sharedMenuController] setMenuVisible:YES animated:YES]; ];

这将显示菜单和在文本字段中输入的文本。但缺点是,文本字段不再是第一响应者。因此,用户必须再次点击文本字段才能输入新字符。这对用户不太友好。

自动补全的另一个选项是使用 UITableView 而不是 UIMenuController,如下所示:http://www.raywenderlich.com/336/auto-complete-tutorial-for-ios-how-to-auto-complete-with-custom-values

但是 UIMenuController 更干净。我尝试了许多方法来使 UIMenuController 成为我的赢家,但我未能优化这种方法。如果您找到了解决方案,请告诉我。

【讨论】:

我最终选择了一条不同的路线,占用的空间更少,而且看起来真的很棒。查看由 Jon Sibley 在 HotelTonight 发布的 this Autocomplete Text Field。 是的,UIMenuController 的替代品更具吸引力。

以上是关于键入时保持 UIMenuController 可见的主要内容,如果未能解决你的问题,请参考以下文章

如何控制 UIMenuController,以防我不希望它自动隐藏?

UITextView在输入时隐藏文本

在 UITextField 中键入时保持占位符静态

使用 uimenucontroller 时遇到问题

显示 UIMenuController 时获取选定的文本

滚动时保持 UITableViewCell 可见? (斯威夫特 3)