gpt4 book ai didi

class - 快速调用父类中的按钮点击方法

转载 作者:行者123 更新时间:2023-11-28 11:23:01 26 4
gpt4 key购买 nike

我有一个调用类来构建菜单的 ViewController。此菜单使用 buttonClicked 方法绘制一个按钮。我从许多不同的 ViewController 调用此菜单,因此我需要此菜单根据调用它的 ViewController 调用不同的按钮方法。我想不出如何对此进行编程?

class MenuController : UIViewController
{
override func viewDidLoad()
{
super.viewDidLoad()
var menu = Menu()
self.view.addSubview(menu)
}

func buttonClicked(sender:UIButton)
{
var tag = sender.tag
println("I want the button click method to call this method")
}
}

class Menu:UIView
{
init()
{
var button:UIButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton
button.frame = CGRectMake(0,0,280, 25)
button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
button.tag = Int(itemNo)
menu.addSubview(button)
}

func buttonClicked(sender:UIButton)
{
var tag = sender.tag
println(tag)
}

}

最佳答案

这是闭包或委托(delegate)/协议(protocol)的完美用例:

关闭选项

在您的 Menu 类中,创建一个公共(public)变量(例如 buttonCode)来托管您的闭包:

class Menu:UIView
{
var buttonCode : ()->()

并且您的 buttonClicked 函数变为:

func buttonClicked(sender:UIButton) {
self.buttonCode()
}

然后在 Controller 中,设置menu.buttonCode = { println("hello") },就是这样。

协议(protocol)选项

您为您的菜单创建一个协议(protocol),它需要一个 buttonCode() 函数。您还可以在 Menu 类中创建一个 var 来托管委托(delegate)的弱引用。您的 View Controller 实现协议(protocol)和 buttonCode() 函数。然后您的 buttonClicked 函数变为:

func buttonClicked(sender:UIButton) {
self.delegate.buttonCode()
}

我个人今天更喜欢使用关闭选项,它更干净、更简单,至少在这种情况下是这样。请看http://www.reddit.com/r/swift/comments/2ces1q/closures_vs_delegates/进行更深入的讨论。

关于class - 快速调用父类中的按钮点击方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25220543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com