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

Swift UIButton显示和淡入子视图:在‘OKButtonPressed]上崩溃:发送了无法识别的选择器

在iOS开发中,使用Swift语言时,遇到UIButton显示和淡入子视图时崩溃,并提示“发送了无法识别的选择器”,通常是由于以下几个原因造成的:

基础概念

  • 选择器(Selector):在Objective-C和Swift中,选择器是一种标识符,用于指定要调用的方法。当一个对象接收到一个消息时,它会根据选择器来确定要执行哪个方法。
  • 崩溃原因:崩溃通常是因为尝试调用一个不存在的方法,或者方法的签名与实际定义的不匹配。

可能的原因及解决方法

1. 方法未实现

确保你尝试调用的方法已经在类中正确实现。

代码语言:txt
复制
@objc func okButtonPressed() {
    // 实现按钮被按下时的逻辑
}

并且在按钮的 addTarget 方法中正确指定了选择器:

代码语言:txt
复制
okButton.addTarget(self, action: #selector(okButtonPressed), for: .touchUpInside)

2. 方法签名不匹配

确保方法的签名与选择器中的签名完全一致。例如,如果你使用了 @objc 属性,确保方法名和参数类型都正确。

3. 类型转换错误

如果你在某个地方尝试将 UIButton 转换为自定义的子类,并且该子类没有实现相应的方法,也会导致崩溃。

代码语言:txt
复制
if let customButton = button as? CustomButton {
    customButton.addTarget(self, action: #selector(customButton.okButtonPressed), for: .touchUpInside)
}

确保 CustomButton 类中实现了 okButtonPressed 方法。

4. 弱引用问题

如果在闭包中使用 self,确保 self 被正确地作为弱引用捕获,以避免循环引用。

代码语言:txt
复制
okButton.addTarget(self, action: #selector(okButtonPressed), for: .touchUpInside)

在闭包中:

代码语言:txt
复制
{ [weak self] in
    guard let self = self else { return }
    // 使用 self
}

示例代码

以下是一个完整的示例,展示了如何为 UIButton 添加点击事件并处理淡入子视图的逻辑:

代码语言:txt
复制
import UIKit

class ViewController: UIViewController {

    let okButton = UIButton(type: .system)
    let subview = UIView()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupButton()
        setupSubview()
    }

    func setupButton() {
        okButton.setTitle("OK", for: .normal)
        okButton.addTarget(self, action: #selector(okButtonPressed), for: .touchUpInside)
        view.addSubview(okButton)
        // 设置按钮布局...
    }

    func setupSubview() {
        subview.backgroundColor = .blue
        view.addSubview(subview)
        subview.alpha = 0 // 初始时透明
        // 设置子视图布局...
    }

    @objc func okButtonPressed() {
        UIView.animate(withDuration: 0.3) {
            self.subview.alpha = 1 // 淡入子视图
        }
    }
}

应用场景

这种技术在用户界面交互中非常常见,例如在表单验证、模态弹窗显示、动态内容加载等场景中,通过按钮触发视图的显示和隐藏动画。

通过以上步骤,你应该能够解决“发送了无法识别的选择器”的问题,并确保 UIButton 正确响应点击事件,实现子视图的淡入效果。

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

相关·内容

Swift-MVVM 简单演练(一)

你看swift是不是真的简洁了许多。...和tableViewDelegate以及loadData(自定义加载数据的方法),下一步我们就要在子控制器里面测试一下效果了。...reloadData() } } ---- 未登录视图显示(访客视图) 现实中经常会遇到一些临时增加的需求,比如登录后显示的是一种视图,未登录又显示另外一种视图,如果你的公司是面向公司内部的APP...到目前为止,虽然我们只是在基类控制器里面创建了访客视图setupVistorView,只有一个访客视图的HQVistorView,但是实际上当我们点击不同的子控制器的时候,每个子控制器都会创建一个访客视图...总结 使用代理传递消息是为了在控制器和视图之间解耦,让视图能够被多个控制器复用,如TableView 但是,如果视图仅仅是为了封装代码,而从控制器中剥离出来的,并且能够确认该视图不会被其它控制器引用,

10.3K51

iOS之深入解析Xcode 13正式版发布的40个新特性

、Vim 键绑定支持、Swift 包集合; 可以在命令行上使用 cktool 与 CloudKit 数据库架构和记录进行交互; 可以在命令行上使用 TextureConverter 将纹理压缩为所有 Metal...的跟踪中导出表数据; Instruments 扩展详细信息视图,现在在选择关联的详细信息视图行时显示 os_log 和 os_signpost 消息和回溯; Run Information 视图现在出现在...; 添加了对 UIButton 和 UIBarButtonItem 上的 changesSelectionAsPrimaryAction 属性的支持; 支持从对象库中创作和拖动 iOS Core Location...Xcode 13 中的 Swift 语法高亮显示是即时且无闪烁的,无论是在文件之间进行编辑还是导航; 即使您的代码不完整或您的项目无法编译,Swift Jump to Definition 现在也能提供更具弹性的体验...发送的默认 Accept-Language 标头具有更新的格式和多个区域设置的更正值。

8.8K40
  • 将模型添加到场景中 - 在您的环境中显示3D内容

    在最后几节中,我们能够检测到一个平面并显示一个焦点方块,以帮助我们为模型指定一个位置。我们也熟悉了热门测试和世界变换。现在,我们拥有显示虚拟对象所需的所有工具。...在右侧,我们有ViewController.swift,在那里我们可以找到该出口的声明。单击并拖动左侧的圆圈,它应该是第15行,然后释放到ARSCNView上。现在,关闭助理编辑。...添加按钮 我们想在视图中添加一个按钮,用作在场景中添加模型的触发器。从对象库中,将UIButton拖动到场景视图的顶部。在“ 属性”检查器中,删除“ 按钮”标题并将图像设置为“ 按钮/添加”。...焦点方块隐藏/显示选项 当我们在屏幕上显示模型时,我们仍然看到焦点方块干扰了我们漂亮的模型。如果我们在安置后隐藏它,你怎么说?...在FocusSquare类中,让我们创建一个函数来为焦点方块的表示设置动画。将隐藏和显示两种情况,因此隐藏值是布尔值。然后我们声明一个SCNAction用于淡入淡出,淡出用于隐藏和淡入显示。

    5.5K20

    Swift:静态工厂方法

    iOS上的UIKit和Mac上的AppKit都为我们提供了创建具有原生外观的UI所需的所有基本核心构建块,但是我们经常需要自定义这些外观以适合我们的设计并为其定义布局。...虽然我们可能无法完全摆脱视图控制器(或与此相关的视图)的子类化,但是某些类型的视图控制器可以从工厂方法中受益。...尤其是在使用子视图控制器时,我们通常最终会得到一组视图控制器,它们只能在其中呈现特定状态,而不是在其中包含大量逻辑。对于那些视图控制器,将其设置移动到静态工厂API可能是一个很好的解决方案。...特别是如果与"Swift:将子视图控制器用作插件" 中的便捷API的稍加修改版本结合使用,我们现在可以在执行异步操作时轻松添加预先配置的加载视图控制器: class ProductListViewController...handle(result) } } } 对添加便捷API的唯一修改是使其返回添加的子视图控制器,从而可以在使用点语法的同时获取对其的引用。

    2.4K10

    iOS开发常用之网络

    此项目应该只用于演示或学习之用,没有服务器 - swift。 Atlas-iOS - 快速在iOS里集成聊天功能,类似开源版本的环信.Layer家开源了一套聊天app界面的解决方案。...WXTabBarController - 在系统UITabBarController的基础上完美实现了安卓版微信TabBar的滑动切换功能,单手操作iPhone 6 Plus切换TabBar一直是一件很痛苦的事情...仿LOL滚动视图 - 仿LOL滚动视图。 答案选择切换页 - 将scrollview和tableview封装在一起,在初始的时候简单的将数据带上,就可以一页一页的左右来回滑动。...STPopup - 提供了一个可在iPhone和iPad上使用的具有UINavigationController弹出效果的STPopupController类,并能在Storyboard上很好的工。...DisplaySwitcher.swift - 两个集合视图在不同布局(平摊和列表)间平滑切换.Yalantis出品。

    23.7K10

    iOS学习——UIPickerView的实现年月选择器

    最近项目上需要用到一个选择器,选择器中的内容只有年和月,而在iOS系统自带的日期选择器UIDatePicker中却只有四个选项如下,分别是时间(时分秒)、日期(年月日)、日期+时间(年月日时分)以及倒计时...,首先是用一个基类来布局我们选择器的整体布局,包括我们的选择器的标题,取消、确定按钮,蒙层等大框架的布局,然后是子类在基类的基础上添加UIPickerView来实现选择器的基本功能以及数据加载和显示。...二 基类布局   在上一部分说了,基类布局主要是对整体的架构进行布局,我们先看下有哪些内容,包括了背景蒙层视图、弹出视图(包含标题行(又包含取消按钮、确定按钮和标题)、分割线和选择器),在子类中会进行一个整体的布局...而对于弹出视图中的标题行(包含取消按钮、确定按钮和标题)、分割线和选择器的具体布局在这里就不进行展开了,很简单的部分,大家自行看一下代码就OK了。   ...如果直接在蒙层上添加弹出式图作为子视图的话,我们的布局相对会简单很多,这里涉及到一点就是子视图的透明度是和父视图保持一致的,如果直接将弹出视图加载到蒙层遮罩视图上,会导致弹出视图的透明度也为0.3,所以弹出视图不能直接加在蒙层遮罩视图上

    4.6K130

    iOS工程师必看的 20 道 面试题

    原因是assign修饰的对象被释放后,指针的地址依然存在,造成野指针,在堆上容易造成崩溃。而栈上的内存系统会自动处理,不会造成野指针。 copy与strong类似。...内存中,引用类型诸如类是在堆(heap)上,而值类型诸如结构体实在栈(stack)上进行存储和操作。...继续访问该对象,程序会得到 nil,不亏崩溃 unowned 与弱引用本质上一样。唯一不同的是,对象在释放后,依然有一个无效的引用指向对象,它不是 Optional 也不指向 nil。...值类型在栈上操作,引用类型在堆上操作。栈上的操作仅仅是单个指针的上下移动,而堆上的操作则牵涉到合并、移位、重新链接等。也就是说Swift这样设计,大幅减少了堆上的内存分配和回收的次数。...通过Swift的let设置,使得这些数据达到了真正意义上的“不变”,它也从根本上解决了多线程中内存访问和操作顺序的问题。 设计成值类型还可以提升API的灵活度。

    3.8K40

    iOS开发常用之图像浏览及处理

    ios-image-filters - 图像滤镜,库比较旧了,很容易崩溃。 XBImageFilters - 图像滤镜。...HZPhotoBrowser - 一个类似于新浪微博图片浏览器的框架(支持显示和隐藏动画;支持双击缩放,手势放大缩小;支持图片存储;支持网络加载gif图片,长图滚动浏览;支持横屏显示)。...在这个自定义视图上创建一个需要的相框大小的视图层把取出的图片赋值给UIImageView按缩放添加到这个层上。对uiimageView添加捏合,移动手势。...TZImagePickerController - 一个支持多选,选原图和视频的图片选择器,同时有预览功能,适配iOS6789系统。教程。...更换头像 - 用户选取从相机或者相册获取图片,并且显示在查看上。 DouBanMeinv.swift - 抓取豆瓣美女图片,瀑布流显示。

    4K60

    动画分析步骤“三步曲”

    如表1所示描述了不同时间段登录按钮的坐标变化情况。幸运的是大家不需要手动设计这一过程,甚至不需要手动写线性渐变的方法,因为iOS在UIView的显示层已经帮我们把这个功能集成了。...动画实现的第二阶段和第三阶段:动画进行阶段和动画结束阶段 要想实现应用打开动画即展现的效果,需要在View视图整体展现之前完成动画实现的第二阶段和第三阶段的设置(因为如果视图已经显示了才设置动画效果,那么会有动画不连贯的现象...当alpha为0时,表明UIView已经隐藏,当alpha为1时UIView显示。结合这一特征可以通过修改alpha在动画开始、结束时的值,实现UIView的淡入淡出效果。...3.Layer属性:圆角渐变、边框颜色、阴影、3D等高级动画效果 UIView是视图显示的容器,负责内容显示和事件响应。...小结 通过对本文的学习,相信大家基本上掌握了动画分析的基本步骤,在这里总结一下动画实现的三个步骤: (1)设置视图的动画初始状态。 (2)添加视图的动画相应属性。 (3)设置视图的动画最终状态。

    90710

    FL Studio21下载MacOS版简体中文支持苹果M1处理器

    查看>测试 - 异步运行测试调试日志 - 在调试日志中显示更新的浏览器文件夹的名称。播放列表:音频剪辑淡入和增益控制: - 音频剪辑淡入、淡出和增益控制,带有可选的自动交叉淡入。...视图 - 按住 (Alt) 可在取消选择“显示淡入淡出预览”/“增益预览”时临时预览淡入淡出和增益。菜单 - (右键单击)“显示淡入淡出编辑控件”图标,用于快速访问淡入淡出选项。...警告对话框 - 新增了有关近似自动化合并的警告“以后不显示此内容”。合并 - 可以与无法精确合并的近似曲线合并,包括 LFO 模式。自动化剪辑编辑器 - 网格线较粗以提高可见性。...VFX 音序器 (Fruity Edition +) - 一种模式琶音器和步进音序器,设计用于在 Patcher 中将音符序列发送到连接的乐器插件。...在具有多列的视图中搜索时选择第一个文件夹。搜索结果显示具有匹配名称的文件夹。显示完整路径作为筛选项目的提示。查找文件 - 右键单击文件的选项以在系统文件浏览器中突出显示它。

    4K20

    三分钟带你了解FL Studio21版本新增功能

    (如果没有其他的话):这个版本混合了Alpha和Beta特性。我们这样做是为了让您尽早访问并提供反馈以前发展被锁定了!如果你有什么建议可以让事情做得更好。现在是时候了。...文件(菜单)-有一个新的“更多”子菜单,显示多达50个最近的项目音频编辑器(脚本)-康沃尔、爱迪生和斯利克斯公司;Python取代PaxCompiler。现有脚本已转换为Python。...音频剪辑渐变和增益控制:播放列表%3E编辑(菜单)-选项“用手动淡入淡出创建新剪辑”播放列表%3E视图(菜单)-选项“商店淡入淡出预览”。当取消选择时,增益值对于具有编辑增益的片段将保持可见。...选项“在选项卡上显示图标和文本”选项在系统文件浏览器中定位文件的选项样本预览面板显示采样率,位深度和立体声元数据。乐谱和MIDI直观地预览整个文件。...文件支持-开幕. m4a音频文件现在是可能的查看%3E测试-异步运行测试触摸控制器-在触摸控制器上直观显示音符活动爱迪生-在信封上增加了多重选择3x Osc、DX10和水果踢-现在可以在Patcher中使用爱迪生

    3.5K00

    汇编寄存器的规则

    这是与之前显示的方法相同的屏幕截图,除了这次是在 iPhone 7 上的 ARM64 程序集中: 您现在可能无法区分这两种架构,但是您很快就会知道它们就像手背一样....作为第一个参数,objc_msgSend 获取在其上发送消息的对象的引用。 随后是一个选择器,它只是一个 char *,用于指定在对象上调用的方法的名称。...其次,Swift 相对于 OC 并不是动态的。事实上,有时候最好假设 Swift 像 C 语言一样。如果知道了一个内存地址,你应该显示地强转为你想要的类型。...这意味着当 Swift 调用函数时,先前分配给选择器的 RSI 寄存器实际上就是函数的第二个参数。好了,足够的理论 - 是时候将其付诸实践了。...sendAction:参数(RDX)将使用选择器,而 to:参数将是 IBAction 的接收器(RCX)。 用寄存器知识和轻按 UIButton 查找代码,这有多酷?

    2.6K50

    成为一名优秀 Swift 开发人员的 10 个小技巧

    发送事件; 这是我们在 iOS 编码过程中最常见的一些场景。...保证 UI 关键组件可见并在顶部输入 有时界面会很有挑战性,特别是在集成了许多功能的应用程序上。幸运的是,我有一位 UI/UX 专家与我一起工作,为我提供了很多有关如何正确操作的建议。...在开发文档中,通知是在控制器与模型或服务之间实施通信可同步模式的正确方法,我在项目中经常使用 Notification Center,基本上实现了观察者模式,并让应用程序带有更多响应式的元素。...只需要将所有 UIButton 连接到相同的 @IBAction,然后使用发送方找出触发了该事件中的哪一个,并为该特定行为编写正确的实现即可。...在本文中,我将重点更多地放在Swift功能上,以提高代码效率并传递Swift机制的优点。我提供了一些简单的示例,说明每个iOS应用程序和开发人员应关注的重点。 - EOF -

    2.3K40

    Swift 周报 第四十一期

    周报精选 新闻和社区:现推出超过 30 个新的开发者活动 提案:全局变量的严格并发性 Swift 论坛:Swift 6 语言模式的进展 推荐博文:Swift 中的崩溃回溯 话题讨论: 如果公司在市中心,...推荐博文 Swift 中的崩溃回溯[9] 摘要: 这篇博客讨论了 Swift 5.9 版本中所包含的一些新的调试代码功能,一个能在实时检查崩溃的外部互动性极强的崩溃处理器,一个可以触发调试器进行即时调试的功能...在 Swift 5.9 版本之前,一旦你的程序运行失败,你只能看到来自父进程(通常是 shell )的消息告诉你子进程崩溃了。而现在,你得到的信息将会更具有详细性。...在许多情况下,你可能会发现你在终端开发的程序崩溃了,但你无法复现问题。没有适当的崩溃日志,这可能会让你非常沮丧,你知道你的程序有一个 bug ,但你不知道问题出在哪里,也不知道如何复现它。...visualEffect 允许我们通过访问特定视图的布局信息来附加一组可动画的视觉效果。 通过上述示例,我们可以看到定义了一个文本视图并附加了 visualEffect 视图修饰符。

    23840

    【IOS开发基础系列】UIView专题

    1.主窗口和次窗口     [self.window makekeyandvisible]让窗口成为主窗口,并且显示出来。有这个方法,才能把信息显示到屏幕上。     ...提示:如果UItextfield不显示,可以考虑设置它的样式,因为其创建默认是虚线的,没有边框。         在ios7里边,主窗口和次窗口是没有区别的。         ...UIView可以产生动画效果的变化包括:     • 位置变化:在屏幕上移动视图。     • 大小变化:改变视图框架(frame)和边界。     • 拉伸变化:改变视图内容的延展区域。     ...2.在容器视图中设置转换。 3.在容器视图中移除子视图。 4.在容器视图中添加子视图。 5.结束动画块。...如果一个子视图的区域超过父视图的bound区域(父视图的clipsToBounds属性为NO,这样超过父视图bound区域的子视图内容也会显示),那么正常情况下对子视图在父视图之外区域的触摸操作不会被识别

    70830

    iOS开发常用之 HUD 弹窗

    MMProgressHUD - 设置HUD出现和消失的方式(包括上下,左右,淡入淡出,放大缩小等等),设置HUD的内容(可以在HUD中加入帧动画,动态图片等等),设置HUD出现时的底部覆盖层颜色,等等...MJPopupViewController - 实现弹出视图的各种弹出和消失效果,包括淡入淡出(淡入,淡出),从屏幕上方飞进,下方飞出,从屏幕左方飞进,右方飞出等等效果,弹窗。...ActionSheetPicker-3.0 - 该项目是此前热门项目ActionSheetPicker的新版本,快速复制了iOS 8上的下拉UIPickerView / ActionSheet功能。....GSAlert解决了这个问题。...CustomPopOverView - 自定义弹出视图,内容支持传一组菜单标题,也支持自定义view,或者自定义viewController,支持任意按钮触发,会显示在按钮底部,也支持切换按钮的对齐方式

    4.3K20

    FL Studio21最新中文版本全新功能详细介绍

    导出(Export)-打开目标文件夹时,在系统文件浏览器中自动选择渲染的文件。文件(菜单)File (menu)-有一个新的“更多”子菜单,最多显示50个最近的项目。...·视图(View)-当取消选择显示淡色预览/增色预览时,按住 (Alt) 可进行淡色和增加色彩的临时预览。·菜单(Menu)-(右键单击)“显示淡色编辑控件”图标,用于快速访问淡色选项。...·对齐-当淡入手柄关闭时,按住(Alt)进行淡入,这样(Alt+Click)就不再重置淡入。·快捷键(Shortcut)-添加 (Shift + F) 以切换“显示淡色编辑控件”图标。...在具有多列的视图中搜索时选择第一个文件夹。搜索结果显示具有匹配名称的文件夹。...样本预览面板显示采样率、比特深度和立体声元数据。选项(Option)-“在选项卡上显示图标和文本”。浏览器(Browser)-为选项卡添加“冻结”选项。

    3.8K20

    iOS 事件传递和处理

    App内:子线程接收事件->主线程封装事件->UIWindow启动hitTest确定目标视图->UIApplication开始发送事件->touch事件开始回调。...确定目标视图之后,UIApplication便会发送事件,将UITouch和UIEvent发送给目标视图,触发其touches系列的方法。...:(CGPoint)point withEvent:(UIEvent *)event pointInside方法返回point和event是否在自己当前视图上; 这两个方法UIView都提供了默认实现,...UIWindow是UIView的子类,UIView的hitTest方法实现和上述过程一致。 思考: UIView在调用子视图hitTest时,是先调用哪些子视图?...上文分析了手势的识别是发生在响应链回调之前,也就是tap手势是发生在touches系列方法回调之前,那么Tap手势应该是在UIButton的touches方法之前。

    1.5K20

    最新版水果FL Studio21新版本更新全解析!80项更新与改进!

    导出(Export)-打开目标文件夹时,在系统文件浏览器中自动选择渲染的文件。文件(菜单)File (menu)-有一个新的“更多”子菜单,最多显示50个最近的项目。...·视图(View)-当取消选择显示淡色预览/增色预览时,按住 (Alt) 可进行淡色和增加色彩的临时预览。·菜单(Menu)-(右键单击)“显示淡色编辑控件”图标,用于快速访问淡色选项。...·对齐-当淡入手柄关闭时,按住(Alt)进行淡入,这样(Alt+Click)就不再重置淡入。·快捷键(Shortcut)-添加 (Shift + F) 以切换“显示淡色编辑控件”图标。...在具有多列的视图中搜索时选择第一个文件夹。搜索结果显示具有匹配名称的文件夹。...样本预览面板显示采样率、比特深度和立体声元数据。选项(Option)-“在选项卡上显示图标和文本”。浏览器(Browser)-为选项卡添加“冻结”选项。

    3.4K30
    领券