如何在自己的应用程序中使用iOS工具提示菜单
您可能已经在某些Apple的默认应用程序中或在iOS上编辑文本时看到了此工具提示控件。 该工具提示实际上有一个名称UIMenuController
,并且可以自定义并在您自己的应用程序中使用,尽管该API可能很难理解。
成为FirstResponder()
与应用程序具有源自UIWindow
的UIView
层次结构类似,它也具有UIResponder
链,因为视图本质上是响应者。
为了在自定义视图上使用UIMenuController
,该视图必须首先成为应用程序的第一响应者。
在应用程序中,首先接收多种事件的响应者对象称为第一响应者。 它接收关键事件,动作事件和动作消息等。
这并不需要花哨的东西,但是在处理多个UIResponder
子类时,了解响应者的层次结构很重要。 尽管UIView
基类继承了UIResponder
接口,但它不会自动赋予UIView
实例成为第一响应者的能力,这就是为什么您只能在UIView
子类上调用.becomeFirstResponder()
。 默认情况下,某些iOS控件(如UITextField
可以成为第一响应者,但是对于自定义视图,您需要覆盖canBecomeFirstResponder
变量。
现在, ResponsiveView
任何实例都可以调用.becomeFirstResponder()
并成为其超级窗口的第一个响应者,并且由于UIView
基类默认将其UIResponder
变量canResignFirstResponder
为true,因此我们也可以在ResponsiveView
上调用.resignFirstResponder()
。 。
UIMenuController
现在我们有了一个自定义视图,可以将其设置为应用程序的第一响应者,让我们在其上显示一个工具提示! UIMenuController
具有一个单例实例,您可以在您的应用程序中使用它来轻松地使用多个视图-这样可确保您不会一次显示多个菜单。
请注意,在显示菜单之前,我们必须指定responsiveView
View的框架。 这是因为UIMenuController
使用此信息将自身适当地放置在窗口中的适当位置。 默认情况下,菜单将显示在第一响应者上方,其箭头指向下方。 您当然可以通过设置箭头方向,指定与第一响应者不同的帧,甚至为目标矩形计算指定不同的超级视图来自定义此行为。
UIMenuItem
在显示菜单之前,我们想要设置一些选项以使其首先显示在菜单中。
例
这是上面的代码示例。 我更喜欢使用minimumPressDuration
为0.3
的UIMenuController
来触发UIMenuController
,因为它模仿了iOS中的默认行为。
如果您对Twitter @sdrzn有任何疑问或想法,请告诉我!