草庐IT

IOS 9 - subview 上的 UIButton 不触发 IBAction socket

coder 2023-09-07 原文

我已经为此苦苦挣扎了几天,但一直无法查明我的问题的原因,正如标题所说, subview 上的 UIButton 在“单击”时不会触发 IBAction socket .

让我详细说明一下,我正在开发一个“类似火种”的应用程序,我正在使用 this third party library .我正在实现自定义 View ,其中包含按钮和其他 Controller 。这些“卡片”中的按钮未触发其 IBAction socket 。

据我所知,该库执行以下操作:

将 3 个“DraggableViews”堆叠在一起,每个可拖动 View 都有 2 个 subview ,一个是内容 View ,我的自定义 View 所在的位置,另一个是叠加 View ,其顶部有一个 ImageView 。可拖动 View 使用两个手势识别器来完成它的工作,第一个是点击手势,它调用委托(delegate)方法来处理卡片中的点击事件(在他们的示例中,它用于显示浏览器 View )。第二个手势是用于实现卡片滑动功能的平移手势。

我已完成作业并尝试了几种不同的解决方案,但我无法触发 IBAction。我尝试了以下方法:

  • 在按钮上触发触摸事件时,使用 DraggableView 的父 View 禁用手势识别器。 - 这有效(手势被禁用)但 IBAction 未被触发。在平移手势的情况下,我不再能够在触摸按钮时“滑动”卡片,并且点击事件不会在上述委托(delegate)方法中遇到断点。在 UI 中,我的按钮在动画时对触摸使用react,但它在 View Controller 中的导出无法达到断点。我已将其禁用:

    //- Called when each DraggableView is visible (not called for view at index 0, but works alright for debugging in the mean time)
    func koloda(koloda: KolodaView, didShowCardAtIndex index: UInt) {
     let subviews = koloda.subviews
     for subview in subviews {
        if let recognizers = subview.gestureRecognizers {
            for gesture in recognizers {
                if gesture is UIPanGestureRecognizer || gesture is UITapGestureRecognizer{
                    //- Also tried setting this to false but nothing.
                    gesture.cancelsTouchesInView = false 
                    gesture.delegate = self
                }
            }
        }
    }
    
    //- On the gestureRecognizerDelegate
    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
       if touch.view is UIButton {
         return false
       } else {
         return true
       }
    }
    
  • 以编程方式在按钮上实现点击手势,在 viewDidLoad 上,我将操作添加到点击手势,但这也不会触发 socket 。

  • 以编程方式将 ImageView 的 userInteractionEnabled 属性设置为 True,希望这将允许触摸事件通过响应链(尽管我在另一篇文章中读到这会产生相反的效果?)。

我还在 Storyboard中检查了自定义 View 中的所有相关 View 和 Controller 都启用了 userInteractionEnabled 选项。

我不知道它是否相关,但我的自定义 View 位于 xib 文件中,当我将 View 传递给库时,我通过实例化 View Controller 并传递它的 View 来实现,如下所示:

if let vc = spiViewConntroller {
        return vc.view
    }

如有任何帮助或建议,我们将不胜感激!

干杯!

编辑: 继续寻找真相,我已经从库中完全删除了覆盖 View ,在 UI 调试器上检查我的自定义 View ,我可以看到覆盖 View 及其 ImageView 不再存在。该按钮仍然没有触发其导出,因此我可以假设叠加 View 不会导致此问题。

我 fork 了 Koloda 库并创建了一个带有 demo example 的分支,分支名称是“StackOverflowDemo”。我添加了一个带有一个按钮的自定义 View ,我在它的 View Controller 中创建了两个 socket ,我在其中更改按钮的标题(有效), View 确实加载了。我还禁用了按钮上的两个手势以复制我当前在我的应用程序中获得的内容。 如果您将其复制下来,您将需要刷掉第一张卡片,因为索引 0 处的卡片不会禁用手势。

我会继续挖掘,希望有人能指出我做错了什么!

干杯。

最佳答案

丹尼尔。 您的问题是您没有将 View Controller 添加为 subview Controller 以使用 Koloda 操作的 View Controller 。结果显示了你的 vc.view,因为 Koloda 保留了它,但没有人保留你的 View Controller ,所以你失去了重要的生命周期方法并且它被释放。

您尝试使用的方法称为容器 View Controller 。 Apple 在此处对其实现提出了建议:https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html

此处简单实现:

- (void) displayContentController: (UIViewController*) content {
   [self addChildViewController:content];
   content.view.frame = [self frameForContentController];
   [self.view addSubview:self.currentClientView];
   [content didMoveToParentViewController:self];
}

关于IOS 9 - subview 上的 UIButton 不触发 IBAction socket ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36127392/

有关IOS 9 - subview 上的 UIButton 不触发 IBAction socket的更多相关文章

  1. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  2. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  3. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  4. ruby-on-rails - Rails - 乐观锁定总是触发 StaleObjectError 异常 - 2

    我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd

  5. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  6. ruby-on-rails - 如何在 Rails Controller Action 上触发 Facebook 像素 - 2

    我有一个ruby​​onrails应用程序。我按照facebook的说明添加了一个像素。但是,要跟踪转化,Facebook要求您将页面置于达到预期结果时出现的转化中。即,如果我想显示客户已注册,我会将您注册后转到的页面作为成功对象进行跟踪。我的问题是,当客户注册时,在我的应用程序中没有登陆页面。该应用程序将用户带回主页。它在主页上显示了一条消息,所以我想看看是否有一种方法可以跟踪来自Controller操作而不是实际页面的转化。我需要计数的Action没有页面,它们是ControllerAction。是否有任何人都知道的关于如何执行此操作的gem、文档或最佳实践?这是进入布局文件的像素

  7. ruby-on-rails - Ruby - 如何从 ruby​​ 上的 .pfx 文件中提取公钥、rsa 私钥和 CA key - 2

    我有一个.pfx格式的证书,我需要使用ruby​​提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o

  8. 带有 attr_accessor 的类上的 Ruby instance_eval - 2

    我了解instance_eval和class_eval之间的基本区别。我在玩弄时发现的是一些涉及attr_accessor的奇怪东西。这是一个例子:A=Class.newA.class_eval{attr_accessor:x}a=A.newa.x="x"a.x=>"x"#...expectedA.instance_eval{attr_accessor:y}A.y="y"=>NoMethodError:undefinedmethod`y='forA:Classa.y="y"=>"y"#WHATTT?这是怎么回事:instance_eval没有访问我们的A类(对象)然后它实际上将它添加到

  9. ruby-on-rails - rails 上的 ruby : radio buttons for collection select - 2

    我有一个集合选择:此方法的单选按钮是什么?谢谢 最佳答案 Rails3中没有这样的助手。在Rails4中,它是collection_radio_buttons. 关于ruby-on-rails-rails上的ruby:radiobuttonsforcollectionselect,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/18525986/

  10. ruby - Faye WebSocket,关闭处理程序被触发后重新连接到套接字 - 2

    我有一个super简单的脚本,它几乎包含了FayeWebSocketGitHub页面上用于处理关闭连接的内容:ws=Faye::WebSocket::Client.new(url,nil,:headers=>headers)ws.on:opendo|event|p[:open]#sendpingcommand#sendtestcommand#ws.send({command:'test'}.to_json)endws.on:messagedo|event|#hereistheentrypointfordatacomingfromtheserver.pJSON.parse(event.d

随机推荐