iOS Swift - 如何以编程方式为所有按钮分配默认操作

2024-04-17

我正在开发一个处于原型开发阶段的应用程序。某些界面元素没有通过情节提要或以编程方式分配给它们的任何操作。

根据用户体验指南,我想在应用程序中找到这些“非活动”按钮,并让它们在测试期间点击时显示“功能不可用”警报。这可以通过 UIButton 的扩展来完成吗?

除非通过界面生成器或以编程方式分配另一个操作,否则如何为 UIButton 分配默认操作以显示警报?


那么你想要实现的目标是可以实现的。我已经使用了UIViewController扩展并添加一个闭包作为没有目标的按钮的目标。如果按钮没有任何操作,则会出现警报。

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.checkButtonAction()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

    }
    @IBAction func btn_Action(_ sender: UIButton) {

    }

}

extension UIViewController{
    func checkButtonAction(){
        for view in self.view.subviews as [UIView] {
            if let btn = view as? UIButton {
                if (btn.allTargets.isEmpty){
                    btn.add(for: .touchUpInside, {
                        let alert = UIAlertController(title: "Test 3", message:"No selector", preferredStyle: UIAlertControllerStyle.alert)

                        // add an action (button)
                        alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))

                        // show the alert
                        self.present(alert, animated: true, completion: nil)
                    })
                }
            }
        }

    }
}
class ClosureSleeve {
    let closure: ()->()

    init (_ closure: @escaping ()->()) {
        self.closure = closure
    }

    @objc func invoke () {
        closure()
    }
}

extension UIControl {
    func add (for controlEvents: UIControlEvents, _ closure: @escaping ()->()) {
        let sleeve = ClosureSleeve(closure)
        addTarget(sleeve, action: #selector(ClosureSleeve.invoke), for: controlEvents)
        objc_setAssociatedObject(self, String(format: "[%d]", arc4random()), sleeve, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
    }
}

我已经测试过了。希望这可以帮助。快乐编码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS Swift - 如何以编程方式为所有按钮分配默认操作 的相关文章

  • 共享扩展 - 自 iOS 14 以来首次尝试时应用程序未显示在共享菜单中

    升级到 Xcode 12 和 iOS 14 后 似乎开始发生一些奇怪的事情 应用程序以前在共享菜单选项中显示良好 但突然它表现得很奇怪 并且仅在第二次尝试后才显示 我的目标是获取网页网址 这是我的共享激活规则 我什至尝试过新项目 并添加了带
  • 如何获取 UITableView 中特定行的高度

    In my UITableView我使用委托方法为不同的行设置了不同的高度 tableView heightForRowAtIndexPath 现在给定一个NSIndexPath 我想获取之前为特定行指定的高度 你可以用这个 CGRect
  • CIFIlter 是否有替代方案可以在 watch os 6 中生成二维码

    我正在开发一个独立于手表的应用程序 我想在 watchkit 上生成二维码 但是由于 coreImage 不能与 watchkit 一起使用 我们还有其他方法可以做到这一点吗 Thanks 我使用支持 watchos 的库 例如EFQRCo
  • 无法覆盖 Rustup 工具链以自定义构建 iOS 工具链

    我正在用我的 Rust 版本创建我自己的工具链 我需要它与 iOS 架构进行交叉编译 当尝试设置默认工具链或覆盖当前目录的工具链时 我收到有关工具链名称的错误 以下是我创建这个新工具链所采取的步骤 创建 Rustup 工具链 rustup
  • 使用可编码的值,有时是 Int,有时是 String

    我有一个 API 有时会返回特定的键值 在本例中id 在 JSON 中作为 Int 有时它会以 String 的形式返回相同的键值 如何使用 codable 来解析该 JSON struct GeneralProduct Codable v
  • iOS 上的 OpenCV - GPU 使用情况?

    我正在尝试开发一个 iOS 应用程序 可以对来自相机的视频执行实时效果 就像 iPad 上的 Photobooth 一样 我熟悉 OpenCV 的 API 但如果大多数处理是在 CPU 上完成而不是在 GPU 上完成 我担心 iOS 上的性
  • 输入文本时 UITextField 的奇怪行为

    想要在以下位置搜索此问题Google但不知道我需要写什么才能找到确切的原因所以我在这里 ISSUE Create UITextField using Interface Builder并运行项目 当我使用输入任何值时iOS Keyboard
  • 使用 MapKit ios 绘制渐变折线

    我正在尝试使用叠加层 MKOverlay 跟踪 MKMapView 上的路线 但是 根据当前的速度 如果颜色发生变化 例如 如果用户从 65 英里每小时行驶到 30 英里每小时 则从绿色变为橙色 我希望在跟踪路线时执行类似 Nike 应用程
  • 使用 Swift PDF417 解码并生成相同的条形码

    我有以下 PDF417 条形码示例 可以使用在线工具进行解码 例如zxing https zxing org w decode jspx 结果如下 5wwwwwxwww0app5p3pewi0edpeapifxe0ixiwwdfxxi0xf
  • 使用 Xcode 5 在装有 iOS 5.1.1 的设备中运行 iOS 应用程序

    我正在尝试在运行 iOS 5 1 1 的 iPad 上安装 iOS 应用程序 当我使用带有开发配置文件的 Xcode 启动它时 出现以下错误 Xcode 无法安装或启动支持 64 位的应用程序 运行 iOS 6 0 之前版本的设备上的架构
  • 使用 Swift 查询 iOS 钥匙串

    我一直在使用 Swift 转换钥匙串查询结果 我的请求似乎有效 let queryAttributes NSDictionary objects kSecClassGenericPassword MyService MyAccount tr
  • 如何使用 AVFoundation 组合不同方向的视频剪辑

    我正在尝试使用 AVFoundation 将多个视频剪辑合并为一个 我可以使用下面的代码使用 AVMutableComposition 创建单个视频 AVMutableComposition composition AVMutableCom
  • 快速以编程方式清除 NSView

    我有一个NSView连接到自定义类 该视图上有一些图画 class LineDrawer NSView var linear NSBezierPath var storage NSUserDefaults standardUserDefau
  • 具有现有仿射变换的 UIKit Dynamics

    我的观点有一些尺度上的转变 当我在其上应用一些 UIKit Dynamics 时 它会将它们归零 如何在视图上保留现有的转换 同时使其跳转 P 谢谢 看看 UIDynamicAnimator 的updateItemUsingCurrentS
  • 如何使 Raspberry Pi 3 可被 iOS 和 CoreBluetooth 发现?

    我有一个 Raspberry Pi 3 我正在尝试使其可供 iOS 设备发现 我跑了sudo hciconfig hci0 piscan让它被发现 我可以用我的 iMac 看到它 在 iOS 上 我使用 CoreBluetooth 并扫描附
  • 从 UIButton 调用类外部的函数

    我有一个函数 我想在按下按钮时调用它 但与我迄今为止所做的任何事情不同 我希望能够从多个 ViewController 中的任何一个访问它 我不想在每个 ViewController 中重复相同的代码块 我尝试在 ViewControlle
  • 无法在 Apple Calendar 中绑定()套接字(dylib 注入)

    我正在尝试检查 iOS 8 1苹果日历 MobileCal app on Reveal http www revealapp com下列的本指南 http petersteinberger com blog 2013 how to insp
  • iOS 6 和 Xcode 5.0 的图标光泽度

    在使用 iOS6 和 XCode 5 时 我真的很困惑如何去除图标的光泽 我已经阅读了这些问题 去除 iOS 4 3 中图标的光泽效果 https stackoverflow com questions 8740387 removing g
  • iOS 使用presentModalSegue 将数据从viewController2 传递回viewController 1

    我有 viewController1 可以对我的 viewController2 进行模态转场 但是 viewController2 嵌入在导航控制器上 因为我需要那里的导航栏 我已经实现了一个协议 将数据从 viewController2
  • 如何检测 OS X 上是否按下了某个键?

    我正在为 OSX 编写 Spritekit 游戏 如何检查当前是否按下某个键 考虑这个例子 some code this could be e g inside a game loop if is key w pressed move fo

随机推荐