首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在没有IBOutlet的情况下使用带有UIButton的IBActions

在没有IBOutlet的情况下使用带有UIButton的IBActions,可以通过以下方法实现:

  1. 使用UIButton的addTarget方法

在你的UIViewController中,你可以使用UIButton的addTarget方法来添加一个事件处理程序,如下所示:

代码语言:swift
复制
let button = UIButton(type: .system)
button.setTitle("点击我", for: .normal)
button.frame = CGRect(x: 100, y: 100, width: 100, height: 50)
button.addTarget(self, action: #selector(buttonClicked), for: .touchUpInside)
self.view.addSubview(button)

然后,你需要在你的UIViewController中实现buttonClicked方法,如下所示:

代码语言:swift
复制
@objc func buttonClicked(sender: UIButton) {
    print("按钮被点击了")
}
  1. 使用闭包

你还可以使用闭包来实现UIButton的点击事件处理程序,如下所示:

代码语言:swift
复制
let button = UIButton(type: .system)
button.setTitle("点击我", for: .normal)
button.frame = CGRect(x: 100, y: 100, width: 100, height: 50)
button.addTarget(self, action: #selector(buttonClicked), for: .touchUpInside)
self.view.addSubview(button)

button.handleControlEvent(.touchUpInside) { [weak self] sender in
    guard let self = self else { return }
    print("按钮被点击了")
}

在这个例子中,我们使用了一个名为handleControlEvent的方法,它接受一个UIControl.Event枚举值和一个闭包作为参数。这个方法的实现如下所示:

代码语言:swift
复制
extension UIControl {
    func handleControlEvent(_ event: UIControl.Event, closure: @escaping (UIControl) -> Void) {
        let sleeve = ClosureSleeve(closure: closure)
        addTarget(sleeve, action: #selector(ClosureSleeve.invoke), for: event)
        objc_setAssociatedObject(self, String(ObjectIdentifier(self).hashValue) + String(event.rawValue), sleeve, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
    }
    
    private class ClosureSleeve {
        let closure: (UIControl) -> Void
        
        init(closure: @escaping (UIControl) -> Void) {
            self.closure = closure
        }
        
        @objc func invoke(sender: UIControl) {
            closure(sender)
        }
    }
}

这个方法使用了一个名为ClosureSleeve的私有类,它包含一个闭包,并且可以将闭包转换为一个Selector,这样就可以将闭包作为UIButton的事件处理程序。

通过以上两种方法,你可以在没有IBOutlet的情况下使用带有UIButton的IBActions。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

按钮与交互-使用按钮触发操作

在本节中,我们将介绍一个重要且简单的元素,即按钮。这个小元素可以改变整个UX。我们将使用该按钮来缩放我们的3D模型。此外,我们将尝试更改手机的壁纸。...在设置页面中,将显示名称更改为角度AR或所需名称。在资产目录中,将应用程序图标从assets文件夹拖放到选定的插槽中。 主要故事板 我们在屏幕上放置一些按钮。...通过单击右上角带有双圆圈的图标启用助理编辑器。您将看到我们同时拥有主故事板和代码。在swift文件中,您将看到一个与之前的ARSCNView链接的IBOutlet。...IBActions 类变量 2个第一个按钮的目的是能够调整我们的3D模型的大小。问题是iPhoneNode的声明是渲染器方法的局部变量。...到目前为止,您可以使用按钮执行许多令人惊叹的事情。 原文: https://designcode.io/arkit-buttons

4.6K20

在没有 Mimikatz 的情况下操作用户密码

在渗透测试期间,您可能希望更改用户密码的常见原因有两个: 你有他们的 NT 哈希,但没有他们的明文密码。将他们的密码更改为已知的明文值可以让您访问不能选择 Pass-the-Hash 的服务。...一旦离线,Mimikatz可以在不被发现的情况下使用,但也可以使用Michael Grafnetter的 DSInternals 进行恢复。...然后可以使用带有-just-dc-user和-history标志的Impacket的secretsdump.py对 esteban_da 帐户执行 DCSync 。...使用 Impacket 重置 NT 哈希 在撰写本文时,存在两 (2) 个对Impacket的主动拉取请求。...使用 Impacket 重置 NT 哈希并绕过密码历史 PR 1171 奖励:影子凭证 我们是否需要重置 esteban_da 的密码才能控制它?答案实际上是否定的,我们没有。

2.1K40
  • 在没有数据的情况下使用贝叶斯定理设计知识驱动模型

    但在进入 CPT 之前,让我们首先使用 bnlearn 制作 DAG。 基于一对一关系的DAG 这四个有向关系现在可以用来构建带有节点和边的图来表示。...总的来说,我们需要指定4个条件概率,即一个事件发生时另一个事件发生的概率。在我们的例子中,在多云的情况下下雨的概率。因此,证据是多云,变量是雨。...这里我们需要定义在多云发生的情况下喷头的概率。因此,证据是多云,变量是雨。我能看出来,当洒水器关闭时,90%的时间都是多云的。...在洒水器关闭的情况下,草地湿润的可能性有多大? P(Wet_grass=1 |Sprinkler=0)= 0.6162 如果洒器停了并且天气是多云的,下雨的可能性有多大?...所使用的知识和专家的经验一样丰富并且和专家一样的带有偏见 换句话说,我们通过询问专家得到的概率是主观概率[5]。

    2.2K30

    V-3-3 在没有vCenter的情况下

    在使用vSphere客户端登陆到ESXi服务器的时候,由于没有安装vCenter,而发现无法克隆虚拟机。...在有vCenter的情况下,可以创建一个模板虚拟机后,右键直接克隆一台虚拟机。或者将虚拟机转换为模板后,以模板创建虚拟机。...如果没有vCenter而现在要创建多台相同的虚拟机的时候可以使用模板来创建虚拟机。 这里说到一个情况是在既没有VCenter和模板的情况下,如何快速复制多台相同的虚拟机。...进入需要复制的模板虚拟机,选中所有的文件并且右键复制。 ? 在新的文件夹中粘贴。 提示:可以进入ssh界面,通过命令行进行复制。...存储的路径如图,为: /vmfs/volumes/datastore1/下。使用命令cp –r来复制需要复制的虚拟机。 ? 复制完虚拟机后,进入新虚拟机的文件夹右键vmx文件,添加到服务器清单。

    1.1K20

    vAttention:用于在没有Paged Attention的情况下Serving LLM

    挑战和优化:vAttention 解决了在没有 PagedAttention 的情况下实现高效动态内存管理的两个关键挑战。首先,CUDA API 支持的最小物理内存分配粒度为 2MB。...在当前的深度学习框架如PyTorch中,通过API如torch.empty分配的张量带有预先分配的物理内存。...如果没有,则同步映射所需的页。 0x6.2.2 延迟回收 + 预先分配 我们观察到,在许多情况下,可以避免为新请求分配物理内存。例如,假设请求在迭代中完成,而新请求在迭代中加入运行批次。...我们没有在这些实验中包括vLLM,因为它没有自己的prefill内核,而是使用FlashAttention的kernel。...在大多数情况下,这些优化确保新到达的请求可以简单地重用先前请求分配的物理内存页。因此,vAttention几乎没有开销,其 prefill 性能与vLLM一样出色。 图11.

    49110

    在没有 try-with-resources 语句的情况下使用 xxx 是什么意思

    在没有使用 try-with-resources 语句的情况下使用 xxx,意味着在代码中没有显式地关闭 xxx对象资源,如果没有使用 try-with-resources,那么在使用xxx对象后,需要手动调用...= null) { client.close(); }}方式二:'try' 可以使用自动资源管理 try 可以使用自动资源管理是指在 Java 7 引入的 try-with-resources...使用 try-with-resources 语句时,可以在 try 后面紧跟一个或多个资源的声明,这些资源必须实现了 AutoCloseable 或 Closeable 接口。...在 try 代码块执行完毕后,无论是否发生异常,都会自动调用资源的 close() 方法进行关闭。...使用 try-with-resources 可以简化资源释放的代码,并且能够确保资源在使用完毕后得到正确关闭,避免了手动关闭资源可能出现的遗漏或错误。

    4.1K30

    在Exce中使用带有动态数组公式的切片器

    如下图2和图3所示,使用SUBTOTAL函数统计可见行数, 图2 图3 在单元格B9中的公式为: =SUBTOTAL(103,表1) 公式中,参数103告诉SUBTOTAL在统计时忽略隐藏行。...现在,在上面列表旁添加一个名为“标志”的列,并为每一行使用SUBTOTAL函数,对于每个可见行返回1,如下图4和图5。...图4 图5 在单元格C3中的公式为: =SUBTOTAL(103,[@示例列表]) 创建切片 选择表中的任意单元格。单击功能区“插入”选项卡“筛选器”组中的“切片器”。...在“插入切片器”对话框中选择所需要的列,如下图6所示,单击“确定”。 图6 结果如下图7所示。 图7 此时,单击切片器,将筛选列表数据。...将切片器连接到公式 使用FILTER函数来仅返回表中的可见行,即“标志”列为1的行,如下图8所示。

    50210

    学习Python与Excel:使用xlwt在没有Excel的情况下编写电子表格

    例如,使用xlwt。 首先,使用pip命令在终端安装xlwt: pip install xlwt 下面是一个示例。...原始的文本文件数据如下: 09700RESEARCH 09800PHYSICIANS PRIVATE OFFICES 09900NONPAID WORKERS MANAGEMENT FEES REFERENCE...LABS 原始数据被搅和在一起,账号和类别没有分开,有些数据甚至没有账号。...图1 要创建这样的输出,代码脚本执行以下操作: 1.分隔帐号和名称 2.分配一个99999的帐号,并将未编号帐号的单元格颜色设置为红色 3.将帐户名转换为正确的大写名称 4.删除帐户名中的任何多余空格...5.将账号和姓名写入电子表格中的两列 6.根据最宽数据的宽度设置每个电子表格列的列宽格式 代码如下: import sys import re from xlwt import Workbook, easyxf

    1.8K20

    NeurIPS 2023 | 在没有自回归模型的情况下实现高效图像压缩

    模型 整体架构 图1 本文方法与现有工作相结合的示意图 图1是在现有的工作中使用本文的相关性损失的示意图,左图是与基本的超先验结构相结合,右图是与Checkerboard模型相结合。...相关性损失的计算 本文提出的相关性损失通过在潜在空间中使用滑动窗口计算得到。...在这个窗口内,首先使用预测得到的 μ 和 σ 对 y 进行标准化,然后计算中心点 m 与窗口中其他点的相关性。在整个潜在空间上以步长1滑动窗口,即可得到每个中心点的相关性。...(4) 中给出的损失函数进行训练,具有相关性损失的模型使用公式 (5) 中修改后的损失函数进行训练。...实验表明,本文所提出的方法在不修改熵模型和增加推理时间的情况下,显著提高了率失真性能,在性能和计算复杂性之间取得了更好的 trade-off 。

    45710

    在不影响程序使用的情况下添加shellcode

    参考 在文章Backdooring PE Files with Shellcode中介绍了一种在正常程序中注入shellcode的方式,让程序以前的逻辑照常能够正常运行,下面复现一下并解决几个小问题。...; return 0; } 编译后的exe,可以使用CFF Explorer查看相关信息。...文件的前后各插入20-40个字节,以90填充 在目标exe中添加一个新的代码段,将bin的内容导入,并设置可读、可写、可执行、包含代码等属性标志 更新header大小以及重建PE头 使用x32dbg调试...PE头大小是和最终的PE头大小是一致的,检查第4步操作 每次调试exe的时候,基址可能会发生变化,所以复制的指令只能用于修改当前调式实例 在复制jmp指令的机器码的时候,注意不要和目标跳转位置太近,会复制成短地址的指令...问题3:在监听端失联的情况下,程序长时间阻塞后程序终止 应该是检查服务端失联的情况下直接终止程序了,通过调试找到终止位置nop掉即可 ?

    1K10

    谷歌AI在没有语言模型的情况下,实现了最高性能的语音识别

    谷歌AI研究人员正在将计算机视觉应用于声波视觉效果,从而在不使用语言模型的情况下实现最先进的语音识别性能。...研究人员表示,SpecAugment方法不需要额外的数据,可以在不适应底层语言模型的情况下使用。 谷歌AI研究人员Daniel S....Park和William Chan表示,“一个意想不到的结果是,即使没有语言模型的帮助,使用SpecAugment器训练的模型也比之前所有的方法表现得更好。...虽然我们的网络仍然从添加语言模型中获益,但我们的结果表明了训练网络在没有语言模型帮助下可用于实际目的的可能性。” ?...自动语音识别(ASR)系统将语音翻译成文本,用于会话式AI,如家庭智能扬声器中的谷歌智能助手或使用Gboard的电子邮件,或安卓智能手机的短信听写工具。

    94770

    神兵利器 - 在没有任何权限的情况下破解任何 Microsoft Windows 用户密码

    使用命令找出哪些用户存在:net user 这个 PoC 使用多线程来加速进程并支持 32 位和 64 位。...PoC 测试场景(使用访客账户) 在 Windows 10 上测试 安装和配置新更新的 Windows 10 虚拟机或物理机。...在我的情况下,完整的 Windows 版本是:1909 (OS Build 18363.778) 以管理员身份登录并让我们创建两个不同的帐户:一个管理员和一个普通用户。两个用户都是本地用户。 /!...默认情况下,域名是%USERDOMAIN%env var 指定的值。...实施安全锁定策略(默认不存在) 打开secpol.msc然后转到Account Policies>并使用(1 到 999)之间的所需值Account Lockout Policy编辑值。

    1.7K30

    在没有技术术语的情况下介绍Adaptive、GBDT、XGboosting等提升算法的原理简介

    假设你正在准备SAT考试,考试分为四个部分:阅读、写作、数学1(没有计算器)、数学2(没有计算器)。为了简单起见,假设每个部分有15个问题需要回答,总共60个问题。...但通常我们将max_depth限制在6到8之间,以避免过拟合。Gradientboost不使用树桩,因为它没有使用树来检测困难的样本。它构建树来最小化残差。...我确实想强调XGboost和Gradientboost之间的一个关键区别。在Gradientboost中,我们计算每个样本的残差后,选取一个节点进行分割,然后继续使用传统的方法构建树。...它没有使用预估器作为树节点。它构建树来将残差进行分组。就像我之前提到的,相似的样本会有相似的残值。树节点是可以分离残差的值。...然而,当我们有一个合理数量的样本,比如几千个,Gradientboost实际上是更健壮的。所以在一些小的数据集的时候我们可以首先使用Gradientboost。

    89010

    怎么在没有专业UI的情况下设计出一个美观的工业组态界面?

    在目前的工控行业里面,软硬件发展的都比较成熟,工程师们能够独立完成功能,然而在现在竞争日益激烈的情况下,无论是触摸屏还是PC机,因为直观的展示了项目的全貌,软件界面显得愈发重要。...那么怎么在没有专业UI的情况下设计出一个美观的界面呢? 下面分享一下我的设计思路,希望对大家有所帮助。在我看来,组态界面的设计包含:框架、颜色、页面、字体、图标、图形这几个部分。...建议字体如下: 字体大小维持在4px的整数倍较好,建议为16px或者20px 建议使用黑体或者微软雅黑等字体格式 文字与背景颜色对比度需要考虑到无障碍设计需求,确保文字清晰易读 慎用加粗、倾斜。...换色 使用PS软件更改图标颜色的操作如下: 1) 在PS中打开图标图片,选中背景层,点击Ctrl+J复制该图层 2) 使用魔棒工具抠图,将图标部分选中,多个选区时可以按住shift进行选取,之后将选中的图标复制...审美是多元的,很多界面设计都会经历多次修改 开始设计时先保证单色填充,熟练了再考虑使用渐变色和透明度。 先设计,在修改。界面设计是一个熟能生巧的过程,设计的多了会有自己的风格和审美。

    1.1K10

    在没有abi文件的情况下调用智能合约方法,web3py实现

    确定函数调用签名 也就是 0xb45112b2 区块链中合约代码执行,需要指定某个合约地址的某个函数,其中这个执行的函数是使用 Keccak-256(SHA-3)编码后的散列,取散列的前四个字节作为函数签名...官方定义:"签名被定义为没有数据位置说明符的基本原型规范表达式,即具有带括号的参数类型列表的函数名称"。...1,搜索网上的签名数据库:https://www.4byte.directory/signatures/ 搜索结果如下: 说明还没有上传函数的 abi 定义 2,没有函数的 abi 信息,就没办法调用了吗...在使用的时候,address 为合约地址 greeter = w3.eth.contract( address='0xB5816B1C17ce9386019ac42310dB523749F5f2c3...2,自己修改 webpy 的代码,支持签名替换 我开源的代码里面提供了,修改过的,contract.py[4]替换即可使用。github 上有修改说明。

    2.4K30

    【iOS 开发】基本 UI 控件详解 (UIButton | UITextField | UITextView | UISwitch)

    UIButton 就是这种控件; -- 静态控件 : 继承了 UIView 基类, 该类控件与用户之间不能交互, 之前使用的 UILabel 就是这种控件; -- 被动控件 : 该类控件可以接受用户操作...UIControl 介绍 (1) UIControl 简介 UIControl 简介 :  -- 使用频率 : UIControl 控件一般不会被使用, 经常被使用的是 UIControl 的子类 UI...; 为不同状态的 UIButton 设置样式 :  -- "setTittle : forState :" 方法 : UIButton 不同状态 设置不同的标题; -- "setTittleColor...; (2) Border Style 属性 Border Style 属性 : 设置文本框边框风格, 支持四种风格, 一般情况下是选择最右边的圆角矩形按钮; (3) Clear Button 属性...resignFirstResponder]; } @end -- 展示效果 : 点击 Done 即可关闭按钮; (4) 自定义键盘附件关闭虚拟键盘 自定义键盘附件 :  -- 作用 : 不是所有的应用都有导航栏, 在没有导航栏的应用中

    6.9K20
    领券