我有一个视图控制器叫dataviewcontroller
。另一个名为scopeviewcontroller
的视图控制器
在dataviewcontroller
,我有一个UIButton
IBOutlet
,叫做AddData
。我想在我的scopeviewcontroller
中调用这个按钮。我想隐藏那个按钮。
我已经在我的寻呼机中使用了这个视图控制器。我想在第三页的scopeviewcontroller
中隐藏AddData
按钮。
我在scopeviewcontroller
viewdidload
中尝试了这段代码。
但是我得到这个错误: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 此处以获取详细说明。
在您的情况下,您可以将bool
var 从scopeviewcontroller
传递到dataviewcontroller
。根据条件,您可以在dataviewcontroller
的viewDidLoad
或viewDidAppear
中设置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
}
}
注意
基本上,在初始化UIViewController
nib 之前不会访问它,因此在加载 nib 后,引用和内存将分配给IBOutlet,因此您只有两种实现方式:
1:-默认情况下,您必须将其隐藏,当您需要取消隐藏时,您可以在dataviewcontroller
viewDidLoad
方法中进行控制。
2第二个在 dataviewcontroller 中用viewDidAppear
或viewDidLoad
编写代码就像 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。例如。