[IOS]Label-UIMenuController

本文介绍如何在SwiftUI中使UILabel具有交互能力,并通过手势识别触发上下文菜单,展示了如何实现自定义菜单项及响应事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按住Label可以显示给定的黑框提示按钮。
尝试着找到TextField的相应做法。

import UIKit

class text: UILabel {
    //MARK: 通过Xib初始化, 并绑定事件
    override func awakeFromNib() {
    // 用户交互
    self.userInteractionEnabled = true
    // 绑定手势
    self.addGestureRecognizer(UITapGestureRecognizer.init(target: self, action: Selector.init("labelClick")))
    }
    func labelClick() {
    // 1. lable成为第一响应者
        self.becomeFirstResponder()
    // 2. 获取菜单
    let menu = UIMenuController.sharedMenuController()
    // 3. 设置自定义菜单
    menu.menuItems = [ UIMenuItem.init(title: "First try", action: Selector.init("First:")), UIMenuItem.init(title: "Second try", action: Selector.init("Second:")) ]
    // 4. 菜单显示位置
    menu.setTargetRect(self.bounds, inView: self)
    // 5. 显示菜单
    menu.setMenuVisible(true, animated: true)
    }
    //MARK: 函数方法。点击时的效果
    func First(menu :UIMenuController ) {
        self.text = "First try"
        self.adjustsFontSizeToFitWidth = true
    }
    func Second(menu :UIMenuController) {
        self.text = "Second try"
        self.adjustsFontSizeToFitWidth = true
    }
    //MARK: 让Lable具备成为第一响应者的资格
    override func canBecomeFirstResponder() -> Bool {
        return true
    }
    //MARK: 返回悬浮菜单中可以显示的选项
    override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {
    // 判断 action 中包含的各个事件的方法名称, 对比上了才能显示
    if (action == Selector.init("First:") || action == Selector.init("Second:")) {
                return true
            }
        return false
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值