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



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

dataviewcontroller,我有一个UIButtonIBOutlet,叫做AddData。我想在我的scopeviewcontroller中调用这个按钮。我想隐藏那个按钮。

我已经在我的寻呼机中使用了这个视图控制器。我想在第三页的scopeviewcontroller中隐藏AddData按钮。

我在scopeviewcontrollerviewdidload中尝试了这段代码。

但是我得到这个错误:Value of type 'UIViewController' has no member 'AddData'

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

class dataviewcontroller: UIViewController {
@IBOutlet var AddData: UIButton! 
}

我的第二个视图控制器:

class scopeviewcontroller: UIViewController,UITableViewDelegate, UITableViewDataSource {
override func viewDidLoad() {
super.viewDidLoad()
let storyboard = UIStoryboard(name: "data", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "dataviewcontroller")
controller.AddData.hidden = true
}

}

请帮帮我...谢谢

您无需访问在寻呼机上添加的每个视图控制器上的按钮。您可以在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)
}
}

出口不会实例化,因为出口是一个变量(或属性(。

笔尖中的对象在加载笔尖时实例化,并在创建对象之后但在将 awakeFromNib 发送到所有相关对象之前尽可能立即将它们分配给每个插座。

查看Peter Hosey的ans 此处以获取详细说明。

在您的情况下,您可以将boolvar 从scopeviewcontroller传递到dataviewcontroller。根据条件,您可以在dataviewcontrollerviewDidLoadviewDidAppear中设置AddData按钮隐藏属性为真或假。

override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.AddData.hidden = true
}

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

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
}
}

注意

基本上,在初始化UIViewControllernib 之前不会访问它,因此在加载 nib 后,引用和内存将分配给IBOutlet,因此您只有两种实现方式:

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

2第二个在 dataviewcontroller 中用viewDidAppearviewDidLoad编写代码就像 luckyShubhra 说:

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

在 scopeViewController 中创建 dataviewController 的对象。例如. var dataVCObj = DataViewController((;比使用对象数据VCObj,你可以访问按钮的iboutlet。例如。

最新更新