我有一个名为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!
}
请帮帮我!...谢谢
答案 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中的viewDidAppear
或viewDidLoad
中编写代码,如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 强>