我想使用UIMenuController根据我应用中已有的数据显示文本字段的自动填充选项。选择一个菜单项时更新菜单项并填充文本字段的代码工作正常,但我似乎无法找到一种方法来在键入时保持菜单控制器可见。我试过了
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
[[UIMenuController sharedMenuController] setMenuVisible:YES animated:YES];
return YES;
}
但这没有任何作用。如果我在代码之前更新菜单项以设置菜单可见,我只是一遍又一遍地替换文本字段中的第一个字母,菜单仍然无法显示。
这里修复的真正问题是UIMenuController在显示时会自动选择文本字段中的最后一个单词,但我还没有找到解决方法。
答案 0 :(得分:0)
我一直试图找到一种方法来做同样的事情。假设您的代码通过使视图成为第一响应者来显示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成为我的赢家,但我没有优化这种方法。如果您找到了解决方案,请告诉我。