<分区>
标签 ios objective-c
目前我正在尝试制作 Hangman 应用程序。我已经获得了主要功能,但我想要一种方法来显示用户已经猜到的字母。我想通过隐藏键盘上的这些字母(这是由文本字段激活的标准键盘)来做到这一点。我已经阅读了有关向键盘添加按钮(例如本教程:http://www.neoos.ch/blog/37-uikeyboardtypenumberpad-and-the-missing-return-key)的信息,但没有删除/禁用现有按钮。 有人知道解决方案吗?我似乎无法弄清楚。
谢谢
最佳答案
没有公共(public) API 可以执行此操作。因此,正如评论中已经建议的那样:您应该更好地将自己的键盘实现为 UIView
子类,并使用方法以您需要的方式更改其行为(隐藏按钮、添加新按钮等)。有很多教程可以教您如何做到这一点。 Apple 也建议这样做 here .如果您计划将您的应用程序国际化,您还应该在您自己的键盘类中处理所有本地化支持。所以所有这些东西都很难实现。如果您不想这样做,那么唯一的方法是使用一些脏 View 操作并将键盘作为 UIView
对象访问,然后随心所欲地使用它。 但是 这是一种非常糟糕的方法,因为它使用私有(private) View 层次结构,并且当 Apple 对其进行一些更改时可能会被破坏,就像在 iOS 7 中使用 UITableViewCell
View 层次结构一样. 而且也是一种非常有限的方式。首先,您必须确保键盘已经显示给用户,否则您将崩溃(因为 windows
数组将只包含一个 UIWindow
)。为此,只需添加一个通知观察者:
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(keyboardShowed)
name:UIKeyboardDidShowNotification object:nil];
然后在keyboardShowed
方法(适用于[4.0,7.1]区间的iOS版本):
-(void)keyboardShowed
{
UIWindow* window = [[[UIApplication sharedApplication] windows]
objectAtIndex:1];
for(UIView* view in window.subviews)
{
if([[view description] hasPrefix:@"<UIPeripheralHostView"])
{
//This view is a keyboard view
// you can iterate its subviews
//and make buttons hidden
NSLog(@"Keyboard Shown: %@", view);
}
}
}
然后,当您实际获得对键盘 View 的引用时,您应该使用 subviews
属性向下跟踪所有层次结构(UIKeyboardImpl
,UIKeyboardLayoutStar
等),而你实际上会得到像按钮这样的 View 。
但正如我所说,这是一种糟糕的方式。因为私有(private) View 层次结构很大,有很多 subview 。所以你应该以其他方式处理你的功能。为什么不让用户输入他已经在你的游戏中猜到的字母,并向他显示某种警告消息?
关于ios - 在 iOS 中隐藏单个键盘按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23959135/