目前我正在尝试制作一个Hangman应用。我已经掌握了主要功能,但我想要一种方法来显示用户已经猜到的字母。我想通过隐藏键盘上的这些字母(这是由文本字段激活的标准键盘)来做到这一点。我已经阅读了关于向键盘添加按钮的信息(例如本教程:http://www.neoos.ch/blog/37-uikeyboardtypenumberpad-and-the-missing-return-key)到处都是但不能删除/禁用现有按钮。 谁知道解决方案?我似乎无法弄明白。
谢谢
答案 0 :(得分:4)
没有公共API可以做到这一点。正如评论中已经建议的那样:您应该更好地将自己的键盘实现为UIView
子类,并使用方法以您需要的方式更改其行为(隐藏按钮,添加新按钮等)。有很多教程可以教你如何做到这一点。 Apple也建议这样做here。如果您计划将应用程序国际化,还应该在自己的键盘类中处理所有本地化支持。所以这些东西都很难实现。如果您不想这样做,那么唯一的方法是使用一些脏视图操作并将键盘作为UIView
对象访问,然后随意使用它。 但是这是一种非常糟糕的方式,因为它使用私有视图层次结构,并且当Apple在iOS 7中使用UITableViewCell
视图层次结构进行一些更改时可能会被破坏。这是一种非常有限的方式。首先,您必须确保键盘已经向用户显示,否则您将崩溃(因为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);
}
}
}
然后,当您实际获得对键盘视图的引用时,您应该使用subviews
属性跟踪所有层次结构(UIKeyboardImpl
,UIKeyboardLayoutStar
等。 )虽然你实际上会获得像按钮这样的视图。
但正如我所说,这是一个糟糕的方式。因为私有视图层次结构很大,有很多子视图。因此,您应该以其他方式处理您的功能。为什么不允许用户输入他已经在游戏中猜到的字母,并向他显示某种警告信息?