【问题标题】:Swift - UIButton created programatically doesn't trigger touch eventSwift - 以编程方式创建的 UIButton 不会触发触摸事件
【发布时间】:2017-05-22 03:51:18
【问题描述】:

我以编程方式创建了一个按钮,并希望添加一个触摸事件处理程序。我已经尝试了我在网上找到的所有技巧,但从未触发所需的功能。

upgradeNowView = UIButton()
upgradeNowView.setTitle("Upgrade", forState: .Normal)
upgradeNowView.contentMode = UIViewContentMode.ScaleToFill
upgradeNowView.frame = CGRect(x: upgradeNowView.frame.minX, y: -50 , width: 320, height: 50)
upgradeNowView.userInteractionEnabled = true
upgradeNowView.sendActionsForControlEvents(.TouchUpInside)
upgradeNowView.addTarget(self, action: #selector(MainViewContainer.upgradeTapped(_:)), forControlEvents: .TouchUpInside)
side_menu_controller?.view.addSubview(upgradeNowView)

并定义了这个

func upgradeTapped(sender: UIButton)
{
    UpgradeViewController.openUpgrade()
}

但这永远不会被调用。任何帮助将不胜感激。

【问题讨论】:

  • 您的选择器位于MainViewContainer,按钮位于side_menu_controller

标签: ios swift events uibutton


【解决方案1】:

您需要在side_menu_controller 实例的类中定义upgradeTapped 函数。我猜是SideMenuController 类。

【讨论】:

    【解决方案2】:

    我发现这是因为我将按钮放置在视图旁边但超出了它的边界(就在顶部):

    upgradeNowView.frame = CGRect(x: upgradeNowView.frame.minX, y: -50 , width: 320, height: 50)
    

    有两种解决方法:

    • 将按钮移动到父视图的边界内,或者
    • 通过覆盖“hitTest”来处理视图外的触摸,如here 所述

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 2011-05-01
      • 2011-01-01
      • 1970-01-01
      相关资源
      最近更新 更多