表情符号键盘布局绘制不正确,且缺少许多表情符号。

3

我的应用程序的虚拟表情键盘看起来非常混乱。

在我的手机上的所有其他应用程序以及我测试的新项目上,键盘看起来完全正常。 代码很简单:

UITextField *textField = [UITextField new];
[otherView addSubview:textField];
[textField becomeFirstResponder];

无论我使用UITextField还是UITextView都没有关系。 什么可能导致这种行为? 在提出这个问题之前,我尝试了一些搜索词(针对其他遇到此问题的人):w3c图标占位符bug uikeyboard。
1个回答

1

我通过逐个删除文件,直到键盘重新正常工作,才找到了问题所在!

原来,在我的 NSString 类别 中,我命名的一个名为+(NSString*)stringWithUnichar:(unichar)value;的方法是一个私有方法,显然由表情符号UIKeyboard使用。

后来,我将该方法更名为+(NSString*)unicharToString:(unichar)value;,表情符号全部恢复了,但是键盘顶部的页面编号指示器(点)仍然错位了。

我进一步查找发现,我的 UIView类别 也有一个干扰的方法名称。它被命名为- (void)setOrigin:(CGPoint)origin;。无论如何,这可能是对类别的不良使用...

故事寓意:小心你在Apple框架的类别中的方法名称!

这里有一篇苹果公司关于"命名方法"的相关文章。在文章末尾,它讨论了私有方法和在子类化Cocoa框架时附加前缀的方法。遗憾的是,苹果没有遵循自己的建议。相反,他们将这个不必要的负担传递给了开发者... 如果NSString的stringWithUnichar:例如被命名为APPLE_stringWithUnichar:就不会出现这个问题了。

这就是为什么我们在类和分类方法中使用前缀的原因。 - Jasarien
1
如果苹果在他们的私有方法前面加上前缀,对开发人员来说不是很好吗? :) - aleclarson
如果Objective-C能够获得命名空间支持,那不是很好吗? :D - Jasarien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接