我必须使用协议/委托来让 ViewController 执行在另一个类中创建的 UIButton 的操作吗?

Posted

技术标签:

【中文标题】我必须使用协议/委托来让 ViewController 执行在另一个类中创建的 UIButton 的操作吗?【英文标题】:Must I use protocols / delegation to have a ViewController perform an action of a UIButton created in another class? 【发布时间】:2016-07-06 16:27:08 【问题描述】:

我创建了一个 UIButton 作为 UIView 类的子视图。我想将该 UIView 作为子视图添加到 UIViewController 类。我想将 UIViewController 类中的目标操作添加到 UIButton。在下面的示例中,当您点击我的 UIButton 时,它应该打印“Hello the button was press!”。然而,什么也没有发生。为什么是这样?我知道还有其他方法可以实现这一目标。为什么我的方法行不通?使用其他技术实现这一目标的利弊是什么?

import UIKit

class ViewController: UIViewController 

let myView = MyView()

override func viewDidLoad() 
    super.viewDidLoad()

    self.view.addSubview(myView)
    myView.myButton.addTarget(self, action: #selector(hello), forControlEvents: UIControlEvents.TouchUpInside)


func hello()

    print("Hello the button was pressed!")






class MyView : UIView

var myMainView = UIView(frame: CGRectZero)
var myButton = UIButton(frame: CGRectZero)

override init(frame:CGRect)
    super.init(frame:frame)

    setUpViews()


required init?(coder aDecoder: NSCoder) 
    fatalError("init(coder:) has not been implemented")


func setUpViews()

    print("Set up views")
    myMainView.frame = CGRectMake(0, 0, UIScreen.mainScreen().bounds.width , UIScreen.mainScreen().bounds.height)
    myMainView.backgroundColor = UIColor.yellowColor()
    self.addSubview(myMainView)

    myButton.frame = CGRectMake(100, 100, 200, 40)
    myButton.backgroundColor = UIColor.darkGrayColor()
    myMainView.addSubview(myButton)


【问题讨论】:

【参考方案1】:

你需要给 myView 一个尺寸。

喜欢:

override func viewDidLoad() 
    super.viewDidLoad()

    myView.frame = view.bounds
    self.view.addSubview(myView)
    myView.myButton.addTarget(self, action: #selector(hello), forControlEvents: UIControlEvents.TouchUpInside)

【讨论】:

以上是关于我必须使用协议/委托来让 ViewController 执行在另一个类中创建的 UIButton 的操作吗?的主要内容,如果未能解决你的问题,请参考以下文章

实现 NSURLConnectionDataDelegate 协议

:IOS Table表视图委托协议和数据协议

OC协议与委托

iOS 委托代理与协议(Delegate and Protocol)

Swift使用委托实现多个协议

在 Swift 上委托 Objective-C 协议