键盘式弹出按钮,iOS

3
想象一下普通的键盘(例如英语键盘)。当按住 A 按钮时,会弹出一个新的菜单,其中包含á、ä和其他按钮。在屏幕上仍然按住第一个手指的同时,将其滑动到另一个按钮上方。当你将它滑动到一个按钮上时,它就进入了突出显示模式(我猜测),当你滑出时,突出显示就被关闭了。如果你松开手指,弹出的按钮会消失。如果你在其中一个按钮上停留,那么该按钮的字符就被输入到文本字段中...
目前我还没有找到实现这一点的方法。长按不是问题。问题在于允许在仍然按住第一个手指的情况下顺序选择新的按钮——只需要一个触摸来完成此操作。
在设置中更改/编辑当前密码设置时,弹出的密码锁屏幕也存在一次触摸允许多个选择的功能。你可以按住 5,但如果你把手指滑到 2 上面,5 就被取消选择,2 被选择,以此类推,而无需松开手指。(设有“数字键盘”的 UITextField 也具有相同的功能)
有人有想法吗?

好的,我正在为此添加赏金。似乎“普通”的UIButton不足以完成此操作。另外,如果您尝试模仿iOS的日语十键键盘(我目前正在尝试),您会注意到对于一个键(如は),不仅有Normal、Highlighted、Selected等正常的UIControl状态,还有一些其他状态——例如两种不同类型的高亮(不确定如何描述它们),然后是弹出菜单,在那里应该至少有几个状态。可能UIControl也不足以完成此操作。 - Jonny
3个回答

3
您需要使用touchesBegan:、touchesMoved:和touchesEnded:方法来检测手指何时接触屏幕以及何时抬起。请查看Apple文档。您需要添加子视图以显示长按后的额外字符(您已经完成了此步骤),然后在touchesMoved中确认手指仍然接触屏幕。在touchesEnded上选择字符。

可能有一种实现目标的方法,但是当我添加普通的UIButtons时,我希望它们在不同状态(正常、高亮、选定等)下能够正常工作,并具有不同的图像/背景。尽可能使用已经存在的UIButtons将是更好的选择。 - Jonny

1

看起来你可以使用 IBAction 方法和手势回调这种方式(仅适用于 iOS 4.0 及更高版本):

  • UIControlEventTouchDown 上:高亮当前字符
  • 在触发绑定到每个单独键的 UILongPressGestureRecognizer 上:为底部位置的键盘直接在当前字符上方打开突出显示的字符菜单,或者为顶部位置的键盘直接在突出显示的字符下方打开菜单
  • 在触发绑定到每个单独键的 UITapGestureRecognizer 上:选择突出显示的字符
  • 在多字符菜单上的 UIControlEventTouchUpInside 上:选择突出显示的字符
  • UIControlEventTouchUpOutside 上:取消多字符选择

这个答案更加优雅。 :) - Infinite Possibilities

0
一种方法是为每个按钮使用标签,并使用开关来确定按下了哪个按钮,尽管设置所有按钮和其他内容可能需要一些时间...“Touches Began/Moved/Ended” 的想法非常聪明,但我不确定在使用按钮时如何实现。也许可以为每个键使用图像,并通过编程方式更改键图像。

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