如何从情节提要中的自定义视图制作@IBAction?

Posted

技术标签:

【中文标题】如何从情节提要中的自定义视图制作@IBAction?【英文标题】:How to make @IBAction from a custom view in storyboard? 【发布时间】:2019-07-27 12:21:43 【问题描述】:

我在viewController 中添加了一个带有按钮的自定义视图。我想从那个按钮创建一个@IBAction 到我的viewController。 我有以下问题:

    如何让它显示在故事板中?当我运行该应用时,它运行良好。 如何从该按钮向我的viewController 创建一个@IBAction
    class CustomCellView: UIView    
      //MARK: Initializer

      override func awakeFromNib() 
          super.awakeFromNib()
      

      override init(frame: CGRect) 
          super.init(frame: frame)
          commonInit()
      
      required init?(coder: NSCoder) 
          super.init(coder: coder)
          commonInit()
      

      override func prepareForInterfaceBuilder() 
          super.prepareForInterfaceBuilder()
          commonInit()
      

     //MARK: Functions

      func commonInit()
          let customView = Bundle.main.loadNibNamed("customCellView", owner: self, options: nil)?.first as? UIView ?? UIView()
          customView.frame = self.bounds
          self.addSubview(customView)
      
    

【问题讨论】:

您忘记将此视图设为 IBDesignable? 您可能不需要创建@IBAction。只需创建一个可选的闭包并从 viewController 提供它,然后从 @IBAction '在'你的 CustomCellView 类中调用闭包。 我做到了 IBDesignable 但结果相同 我需要viewController中的@IBAction来处理一些数据。 我在这篇文章中找到了答案:***.com/questions/44845562/… 【参考方案1】:

在您添加customViewviewController 中添加@objc

例如
    @objc func actionCustom()
    
        print("Click Added") 
    
使用
func commonInit()
      let customView = Bundle.main.loadNibNamed("customCellView", owner: self, options: nil)?.first as? UIView ?? UIView()
      customView.frame = self.bounds
      self.addSubview(customView)

      customView.button.addTarget(self, action: #selector(actionCustom), for: .touchUpInside) //Add click code here
  

【讨论】:

commonInit() 中的 actionCustom 给出错误:“使用未解析的标识符 'actionCustom'”【参考方案2】:

    我的 customView 没有显示在情节提要中,但是当我运行应用程序时它没问题

    这是自定义视图的预期行为。仅在定义视图的 xib 中使用自定义视图时,您不会看到视图在 xib 中的外观。

    如何将 @IBAction 从那个按钮变成我的 viewController。

    你不能。自定义视图不会在界面生成器中公开子视图。您可以做的最好的事情是使用委托模式,或者正如 Bhavesh Sarsawa 指出的那样,通过将 vc 添加为目标或通过在调用依赖注入发送的闭包的自定义视图中创建 IBAction 以编程方式进行。

customButton.setAction  code that gets called when the button is pressed 

【讨论】:

以上是关于如何从情节提要中的自定义视图制作@IBAction?的主要内容,如果未能解决你的问题,请参考以下文章

无法从情节提要中的 UITapGestureRecognizer 拖动 IBAction

一个 IBAction 用于多个带有按钮的自定义原型单元

为啥我不能从情节提要创建 IBAction

在 xcode 中的自定义视图中给出高度后刷新情节提要视图控制器

如何使用情节提要从自定义 uitableviewcell 正确启动弹出框转场

从视图中检索数据到情节提要中的 UITableViewCell