首页 理论教育 如何使用选项菜单

如何使用选项菜单

时间:2023-06-23 理论教育 版权反馈
【摘要】:运行模拟器,点击按钮,如图14.4.3所示:首先使用UIMenuController.shared获取到菜单控制器的单例,再使用UIMenuItem类创建两个按钮实例,分别制定点击事件为clickMenuItem1和clickMenuItem2。图14.4.3自定义选项菜单展示点击任何一个按钮,在下方的控制台中将会打印点击的情况,我们可以在点击按钮的方法中增加自己的代码逻辑。

如何使用选项菜单

虽然UIPasteboard类是剪切、复制和粘贴操作的核心,但我们也可以在这些操作中使用其他UIKit类的协议和实例实现,如14.4节开头所述。

通过覆写UIResponder的canPerformAction(_:withSender:)方法,创建UIResponderActionPractise项目,并且创建一个新的CocoaTouch类,命名为“ActionTextView”,继承自UITextView类,代码如下:

动手写14.4.1 UIResponderActionPractise->ActionTextView.swift

这里在canPerformAction(_:withSender:)方法中判断传入的action是否为剪切事件,如果是则返回true,否则返回false。

接着在Main.storyboard中添加一个UITextView,如12.14节中学习过的那样,并使用AutoLayout进行布局。接着如图14.4.1所示,点击添加的“Text View”并选中Identity Inspector,将Custom Class中的class设置为ActionTextView。

图14.4.1 添加Text View并指定Class

此时运行模拟器,在Text View的区域中长按,将会弹出选项菜单,如图14.4.2所示:

图14.4.2 只能剪切的Text View

这里不需要显式地展示选项菜单,只要告诉UIKit框架可以响应的事件即可。读者可以尝试将copy(_:)、select(_:)等action识别出,然后返回true,这样选项菜单中还会多出几个选项。(www.xing528.com)

此外,我们也可以显式地调用方法来展示UIMenuController,并且在弹出的选项菜单中加入自己的按钮。创建项目UIMenuControllerPractise,并在Main.storyboard上添加一个按钮,为其在View Controller中绑定事件,代码如下:

动手写14.4.2 UIMenuControllerPractise->ViewController.swift

接着在clickShowMenuButton(_ sender: UIButton)方法中实现弹出菜单选项的逻辑,代码如下:

动手写14.4.3 UIMenuControllerPractise->ViewController.swift

首先使用UIMenuController.shared获取到菜单控制器的单例,再使用UIMenuItem类创建两个按钮实例,分别制定点击事件为clickMenuItem1和clickMenuItem2。这里使用了Objective-C世界中的selector,所以需要在传入的方法定义前加“@objc”才能让selector方法找到对应的事件。使用菜单控制器的menuItems属性为选项菜单增加新的按钮,使用setTargetRect(_ targetRect: CGRect, in targetView: UIView)将菜单展示的位置以及目标视图设定好,最后调用setMenuVisible(_ menuVisible: Bool, animated: Bool)展示出自定义选项菜单。注意:需要覆写UIResponder属性canBecomeFirstResponder的获取方法,返回true,并且覆写canPerformAction方法在判断自定义按钮的事件时返回true。运行模拟器,点击按钮,如图14.4.3所示:

图14.4.3 自定义选项菜单展示

点击任何一个按钮,在下方的控制台中将会打印点击的情况,我们可以在点击按钮的方法中增加自己的代码逻辑。在本例中,我们可以在action中增加剪切和复制事件的判断,这样系统的选项和自定义的选项会一起被展示出来。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈