将IBOutlet UIButton从一个类调用到另一个Viewcontroller

时间:2017-07-10 05:52:43

标签: ios swift uiviewcontroller uibutton

我有一个名为dataviewcontroller的视图控制器。另一个视图控制器名为scopeviewcontroller

dataviewcontroller我有一个名为IBOutlet的{​​{1}} UIButton。我想在AddData中调用此按钮。我想隐藏那个按钮。

我在pager中使用了此视图控制器。我想在scopeviewcontroller中隐藏AddData按钮,该按钮位于第三页。

我在scopeviewcontroller中的viewdidload尝试了此代码。

但是我收到此错误:scopeviewcontroller

我在第一个视图控制器中的代码:

Value of type 'UIViewController' has no member 'AddData'

我的第二个视图控制器:

class dataviewcontroller: UIViewController {

    @IBOutlet var AddData: UIButton! 
}

请帮帮我!...谢谢

4 个答案:

答案 0 :(得分:1)

您无需访问在寻呼机上添加的每个视图控制器上的按钮。您可以隐藏scopeviewcontroller本身上的按钮。在CAPSPageMenuDelegate

的帮助下

在ScopeViewController中,设置寻呼机的委托。

fun viewDidLoad() {
   super.viewDidLoad()
   pageMenu.delegate = self 
}

实施协议CAPSPageMenuDelegate

extension scopeviewcontroller: CAPSPageMenuDelegate {
    func willMoveToPage(_ controller: UIViewController, index: Int) {
        self.AddData.isHidden = (index == 2)
    }
}

答案 1 :(得分:0)

您必须从dataviewcontroller键入Cast UIViewController,因为默认情况下它将返回到没有UIViewController按钮的父类AddData对象,您必须这样做: -

var needHideAddData = true

class scopeviewcontroller: UIViewController,UITableViewDelegate, UITableViewDataSource {

 override func viewDidLoad() {
        super.viewDidLoad()
        let storyboard = UIStoryboard(name: "data", bundle: nil)
        let controller = storyboard.instantiateViewController(withIdentifier: "dataviewcontroller") as! dataviewcontroller
        controller.AddData.hidden = true
    }
}

注意

基本上,在初始化UIViewController nib之前不会访问它,所以在将引用加载nib之后将内存分配到IBOutlet,这样你只有两种方法可以实现的是:

1: - 默认情况下,您必须将其隐藏,当您需要取消隐藏时,您可以使用dataviewcontroller viewDidLoad方法进行控制。

2 第二个在dataviewcontrolleris中的viewDidAppearviewDidLoad中编写代码,如luckyShubhra告诉:

class dataviewcontroller: UIViewController {
    @IBOutlet var AddData: UIButton! 
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        self.AddData.hidden = needHideAddData
    }
}

答案 2 :(得分:0)

插座不会实例化,因为插座是变量(或属性)。

在加载该nib时,实例化nib中的对象,然后在创建对象之后但在将awakeFromNib发送到所有相关对象之前,将它们尽可能地分配给每个出口。

由Peter Hosey here检查ans以获得详细说明。

在您的情况下,您可以将bool var从scopeviewcontroller传递到dataviewcontroller。根据条件,您可以在AddData的{​​{1}}或dataviewcontroller中将viewDidLoad按钮隐藏属性设置为true或false。

viewDidAppear

答案 3 :(得分:0)

在scopeviewcontroller中创建dataviewcontroller的对象。 的例如。 var dataVCObj = DataViewController(); 比使用对象dataVCObj,您可以访问按钮的iboutlet。 的例如。 dataVCObj.AddData