ios - 在 iOS 中隐藏单个键盘按钮

标签 ios objective-c

<分区>


想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post .

关闭 8 年前

目前我正在尝试制作 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 属性向下跟踪所有层次结构(UIKeyboardImplUIKeyboardLayoutStar 等),而你实际上会得到像按钮这样的 View 。

但正如我所说,这是一种糟糕的方式。因为私有(private) View 层次结构很大,有很多 subview 。所以你应该以其他方式处理你的功能。为什么不让用户输入他已经在你的游戏中猜到的字母,并向他显示某种警告消息?

关于ios - 在 iOS 中隐藏单个键盘按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23959135/

上一篇:ios - 如何显示不同的markerInfoWindow?

下一篇:ios - 采用 Objective-C iOS 的多种协议(protocol)

相关文章:

iphone - Sqlite 选择列并删除重复项

ios - 我应该使用哪种应用内购买?

ios - 如何在 Xcode 中打开 .srt 文件?

ios - 可扩展的UICollectionViewCell重新定位问题

ios - 从firebase数据库检索数据: code didn't go into the completion block or an error block

iphone - 如何从 DetailView 中推送 UITableView?

ios - 如何在 iOS 上获取设备品牌和型号?

iphone - 如何知道设备类型

ios - 快速将图像上传到 asp.net web 服务

ios - 从NSMutableArray删除特定项目