单击按钮时将按钮的图像从图像更改为另一个时出错

Posted

技术标签:

【中文标题】单击按钮时将按钮的图像从图像更改为另一个时出错【英文标题】:Error while Changing the image of the button from an image to another when clicked on the button 【发布时间】:2019-02-10 04:10:25 【问题描述】:

这是我的代码:

@IBAction func moreClicked(_ sender: UIButton) 
    if sender.currentImage == #imageLiteral(resourceName: "more_off")
        sender.setImage(#imageLiteral(resourceName: "more_on"), for: .normal)
    
    else
    
        sender.setImage(#imageLiteral(resourceName: "more_off"), for: .normal)
    


我收到此错误:

2018-09-05 11:03:28.708661+0530 音乐播放器[25450:590989] -[musicPlayer.SecondViewController 更多:]:无法识别的选择器发送到实例 0x7fc1d4606d00

2018-09-05 11:03:28.715659+0530 音乐播放器[25450:590989] * 由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因: '-[musicPlayer.SecondViewController more:]: 发送无法识别的选择器 到实例 0x7fc1d4606d00' * 第一次抛出调用堆栈:( 0 CoreFoundation 0x00000001087ea1e6 exceptionPreprocess + 294 1 libobjc.A.dylib 0x0000000107a36031 objc_exception_throw + 48 2 核心基础 0x000000010886b784 -[NSObject(NSObject) 不识别选择器:] + 132 3 UIKit 0x0000000108e956db -[UIResponder doesNotRecognizeSelector:] + 295 4 CoreFoundation 0x000000010876c898 ___forwarding_ + 1432 5 CoreFoundation 0x000000010876c278 _CF_forwarding_prep_0 + 120 6 UIKit 0x0000000108c683e8 -[UIApplication sendAction:to:from:forEvent:] + 83 7 UIKit 0x0000000108de37a4 -[UIControl sendAction:to:forEvent:] + 67 8 UIKit 0x0000000108de3ac1 -[UIControl_sendActionsForEvents:withEvent:] + 450 9 UIKit 0x0000000108de2a09 -[UIControl touchesEnded:withEvent:] + 580 10 UIKit 0x0000000108cdd0bf -[UIWindow _sendTouchesForEvent:] + 2729 11 UIKit 0x0000000108cde7c1 -[UIWindow sendEvent:] + 4086 12 UIKit 0x0000000108c82310 -[UIApplication sendEvent:] + 352 13 UIKit 0x00000001095c36af dispatchPreprocessedEventFromEventQueue + 2796 14 UIKit 0x00000001095c62c4 __handleEventQueueInternal + 5949 15 核心基础 0x000000010878cbb1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 17 16 核心基础 0x00000001087714af __CFRunLoopDoSources0 + 271 17 CoreFoundation 0x0000000108770a6f __CFRunLoopRun + 1263 18 CoreFoundation 0x000000010877030b CFRunLoopRunSpecific + 635 19 图形服务 0x000000010ff76a73 GSEventRunModal + 62 20 UIKit 0x0000000108c67057 UIApplicationMain + 159 21 音乐播放器 0x000000010711cc27 主 + 55 22 libdyld.dylib 0x000000010cd4f955 start + 1 ) libc++abi.dylib: 终止于 NSException 类型的未捕获异常

【问题讨论】:

您的代码运行良好。 您的 IBAction 可能连接错误。断开操作并重新连接。还是您使用addTarget 以编程方式进行操作? 我删除了之前的连接,重新连接。现在可以了,谢谢 【参考方案1】:

2018-09-05 11:03:28.708661+0530 音乐播放器[25450:590989] -[musicPlayer.SecondViewController 更多:]:无法识别的选择器发送到实例 0x7fc1d4606d00

上面的消息意味着SecondViewController 期望有一个名为more: 的方法,但是当触发操作并且该类中的实例试图找到more: 方法时,它无法识别该方法并且应用程序崩溃。

我认为这里发生的事情是:您已将操作从 Xib/Storyboard 拖到您的 VC 类中,并将其命名为 more:。在此之后,您手动将其重命名(不是 Refactor > Rename)为moreClicked:。这样,SecondViewController 的 IBAction 仍然指向名为 more: 的方法,但是您的类不再具有这种方法。

所以基本上,您需要从 xib/storyboard 中删除已经存在的 IBAction 引用,并使用新方法重新连接它:moreClicked:,一切都应该正常工作。

【讨论】:

以上是关于单击按钮时将按钮的图像从图像更改为另一个时出错的主要内容,如果未能解决你的问题,请参考以下文章

在按钮单击时设置 JCrop 的纵横比?

动态点击事件未触发

单击单选按钮时,元素内容更改为图像

如何在单击并再次在 Windows Phone 中释放时更改按钮图像

使用 jQuery 切换 DIV 背景图像

我正在快速处理收藏夹,在 favorite_btn 上单击我想将按钮的图像从星形更改为 star.fill