如何从情节提要中的自定义视图制作@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】:
在您添加customView
的viewController
中添加@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
在 xcode 中的自定义视图中给出高度后刷新情节提要视图控制器