gpt4 book ai didi

swift - 如何以编程方式创建一个按钮以快速显示在单独的 View Controller 中

转载 作者:行者123 更新时间:2023-11-30 13:24:58 24 4
gpt4 key购买 nike

我在 ViewController 中创建了一个函数,用于创建 UIButton

当我在同一个ViewController中调用该函数时,在ViewDidLoad中,它工作得很好。但是当我尝试使用我在弹出窗口中创建的按钮调用该函数时,我不断收到此消息

Error "Thread1:EXC_BREAKPOINT(code=1, subcode=0x1002ce588)".

我意识到这是一个常见错误,但我似乎找不到解决方法。

这是我所拥有的。

class func addButtonToMainController()
{
var button1: UIButton!
button1 = UIButton(type: .System)
button1.setTitle("placeholder", forState: UIControlState.Normal)
button1.bounds = CGRect(x: 0, y: 0, width: 100, height: 100)
button1.center = CGPoint(x: 0, y: 0)
button1.titleLabel?.font = UIFont.systemFontOfSize(20)
button1.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
button1.backgroundColor = UIColor.blueColor()
button1.addTarget(MainViewController(), action: Selector("animateButtonPressed:"), forControlEvents: UIControlEvents.TouchUpInside)
MainViewController().view.addSubview(button1)
}
func animateButtonPressed(sender: AnyObject){
print("animate")
}

这是我从弹出 View Controller 调用该函数的地方。

@IBAction func buttonPressed(sender: AnyObject) {
MainViewController.addButtonToMainController()
}

这里的重点是在弹出窗口中的主视图 Controller 上创建一个工作按钮。任何帮助将不胜感激。谢谢。

最佳答案

您所拥有的不起作用,因为您正在创建 MainViewController 的新实例每次您调用MainViewController 。您需要确保您正在与唯一一位 MainViewController 交谈。这是由 Storyboard创建的。

为了调用另一个 viewController 中的函数,您需要该 viewController 的实例。使用以 popOver 形式呈现的 viewController 来实现此目的的最佳方法是使用委托(delegate)。

在下面的示例中,我使用了 segue 来呈现 SecondViewController 。我定义了一个名为 ButtonAdder 的协议(protocol)它简单地描述了一个实现方法 addButton 的类.

然后,确保MainViewController实现ButtonAdder协议(protocol)添加 ButtonAdderclass声明行并提供 addButton方法。

prepareForSegue ,添加MainViewController的实例(即 self )作为 delegate SecondViewController的.

SecondViewController ,调用delegate?.addButton()当您需要MainViewController时添加其按钮。

确保 Segue 标识符设置为 "presentPopover"属性检查器中使下面的代码正常工作。

<小时/>

MainViewController.swift

import UIKit

protocol ButtonAdder: class {
func addButton()
}

class MainViewController: UIViewController, ButtonAdder {

func addButton() {
var button1: UIButton!
button1 = UIButton(type: .System)
button1.setTitle("placeholder", forState: UIControlState.Normal)
button1.bounds = CGRect(x: 0, y: 0, width: 100, height: 100)
button1.center = CGPoint(x: 0, y: 0)
button1.titleLabel?.font = UIFont.systemFontOfSize(20)
button1.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
button1.backgroundColor = UIColor.blueColor()
button1.addTarget(self, action: Selector("animateButtonPressed:"), forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(button1)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "presentPopover" {
let dvc = segue.destinationViewController as! SecondViewController
dvc.delegate = self
}
}

func animateButtonPressed(button: UIButton) {
// do something
}
}
<小时/>

SecondViewController.swift

import UIKit

class SecondViewController: UIViewController {

weak var delegate: ButtonAdder?

@IBAction func doCall(sender: UIButton) {
delegate?.addButton()
}

}

关于swift - 如何以编程方式创建一个按钮以快速显示在单独的 View Controller 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37341183/

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