gpt4 book ai didi

ios - IBoutlet 和 IBAction 在一个单独的类中分解 UIViewController

转载 作者:行者123 更新时间:2023-11-28 07:16:29 25 4
gpt4 key购买 nike

在我的 Storyboard中,我有一个 ViewController 链接到一个名为 MyViewController 的类。

在这个 View 中,有很多 @IBOutlet@IBAction 我想知道是否可以用包含 @IBOutet 和@IBAction。

例如:

class MyViewController
{
@IBOutlet var button1 : UIButton!
@IBOutlet var button2 : UIButton!
...
@IBOutlet var button10 : UIButton!

@IBAction func clickOnButton1(sender : AnyObject!)
{
...
}

@IBAction func clickOnButton2(sender : AnyObject!)
{
...
}

...

@IBAction func clickOnButton10(sender : AnyObject!)
{
...
}
}

会...

class MyViewController
{
let buttonsManager = ButtonsManager()
}

class ButtonsManager
{
@IBOutlet var button1 : UIButton!
@IBOutlet var button2 : UIButton!
...
@IBOutlet var button10 : UIButton!

@IBAction func clickOnButton1(sender : AnyObject!)
{
...
}

@IBAction func clickOnButton2(sender : AnyObject!)
{
...
}

...

@IBAction func clickOnButton10(sender : AnyObject!)
{
...
}
}

但问题是,我如何将按钮 IBOutletIBAction 链接到 ButtonsManager 类,因为我的 Storyboard中 View 的所有者是MyViewController 类?

谢谢!

最佳答案

免责声明:我不知道这是否是推荐的做法,但我认为这是一个有趣的问题。无论哪种方式,我想出了这个解决方案,它至少有效。自己决定这是否是您想要做的事情。

首先让您的 ButtonsManager 成为 NSObject 的子类。这样我们就可以使 ButtonsManager 的实例成为 IBOutlet 本身。

class ButtonsManager: NSObject {
@IBOutlet var button1 : UIButton!
@IBAction func clickOnButton1(sender : AnyObject!) {
print("hello world!")
}
}

我为按钮添加了一个导出,以及一个打印“hello world!”的 Action 。本质上,您会将所有的@IBOutlets 和@IBActions 移到此类中。

在您的 View Controller 类中,添加一个类型为 ButtonsManager 的 @IBOutlet:

class MyViewController {

@IBOutlet var buttonsManager: ButtonsManager?

// rest of class
}

剩下的就是在 Interface Builder 中进行连接:

  1. 将对象库中的通用“对象”项目添加到场景中。
  2. 在 Identity Inspector 中,将其自定义类设置为“ButtonsManager”
  3. 选择场景中的 View Controller (例如 MyViewController)并转到连接检查器。
  4. 建立从 buttonsManager Outlet 到场景中 ButtonsManager 对象的连接
  5. 在场景中再次选择 ButtonsManager 对象并转到连接检查器。
  6. 您可以在此处找到所有 channel 和收到的操作。像往常一样将它们连接到您的 View 。 IE。通过从 outlet/action 拖动到相应的 View 元素来建立连接。

编译!

编辑:

更好的解决方案可能是在 ButtonsManager 类中引用 View Controller ,而不是相反。这将使您可以更轻松地从 IBAction 方法访问 View Controller 类。作为奖励,您的 View Controller 类中将没有@IBOutlet 关键字。

请记住在 Interface Builder 中更改连接。即,移除 MyViewController 上的连接,并在 ButtonsManager 上添加从 myViewController outlet 到场景中 MyViewController 对象的连接。

class MyViewController {

var testString = "Hello world!"

func testMethod() {
print("Printing some other string here!")
}

// rest of class
}

class ButtonsManager: NSObject {
@IBOutlet var myViewController : MyViewController!
@IBOutlet var button1 : UIButton!
@IBAction func clickOnButton1(sender : AnyObject!) {
print(self.myViewController.testString)
self.myViewController.testMethod()
}
}

关于ios - IBoutlet 和 IBAction 在一个单独的类中分解 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25760589/

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