在我的故事板中,我有一个与名为MyViewController的类链接的ViewController。
在这个视图中,有很多@IBOutlet
和@IBAction
,我知道是否可以用包含@IBOutet和@IBAction的分隔类来分解这个ViewController。
例如:
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!)
{
...
}
}
但问题是,如何将按钮IBOutlet
和IBAction
关联到ButtonsManager class
,因为我的故事板中的视图所有者是MyViewController class
?
谢谢!
答案 0 :(得分:1)
免责声明:我不知道这是否是推荐的做法,但我认为这是一个有趣的问题。无论哪种方式,我想出了这个解决方案,至少有效。如果你想做什么,请自己决定。
首先让你的ButtonsManager成为NSObject的子类。这样我们就可以将ButtonsManager的一个实例变成一个IBOutlet本身。
class ButtonsManager: NSObject {
@IBOutlet var button1 : UIButton!
@IBAction func clickOnButton1(sender : AnyObject!) {
print("hello world!")
}
}
我为按钮添加了一个插座,还有一个动作打印了#hello world!"。基本上,您可以将所有@IBOutlets和@IBActions移动到此类中。
在视图控制器类中,添加一个类型为ButtonsManager的@IBOutlet:
class MyViewController {
@IBOutlet var buttonsManager: ButtonsManager?
// rest of class
}
剩下的就是在Interface Builder中挂钩:
编译!
编辑:
更好的解决方案可能是在ButtonsManager类中引用视图控制器,而不是相反。这样可以更轻松地从IBAction方法访问视图控制器类。作为奖励,您的视图控制器类中没有@IBOutlet关键字。
请记住在Interface Builder中更改连接。也就是说,删除MyViewController上的连接,并将ButtonsManager上的连接从myViewController插座添加到场景中的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()
}
}