键入时保持 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 可见的主要内容,如果未能解决你的问题,请参考以下文章