从一个类调用IBOutlet UIButton到另一个Viewcontroller
我有一个视图控制器称为scopeviewcontroller
。另一个视图控制器称为scopeviewcontroller
在dataviewcontroller
我有一个名为AddData
的UIButton
的IBOutlet
。我想在我的scopeviewcontroller
调用这个button。 而我想隐藏那个button。
我在寻呼机中使用了这个视图控制器。 我想隐藏AddData
button在我的scopeviewcontroller
中出现在第三页。
我在我的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 } }
请帮助我!谢谢
您无需访问您在寻呼机上添加的每个视图控制器上的button。 你可以隐藏scopeviewcontroller
本身的button。 在CAPSPageMenuDelegate
的帮助下
在ScopeViewController中,设置你的寻呼机的委托。
fun viewDidLoad() { super.viewDidLoad() pageMenu.delegate = self }
并实现协议CAPSPageMenuDelegate
extension scopeviewcontroller: CAPSPageMenuDelegate { func willMoveToPage(_ controller: UIViewController, index: Int) { self.AddData.isHidden = (index == 2) } }
sockets不会实例化,因为sockets是variables(或属性)。
当nib被加载时,nib中的对象被实例化,并且在创build对象之后但在awakeFromNib被发送给所有相关对象之前,它们被尽可能立即分配给每个出口。
在这里查看Peter Hosey的答案以获得详细的解释。
在你的情况下,你可以从scopeviewcontroller
传递一个bool
scopeviewcontroller
到scopeviewcontroller
。 根据条件,您可以在AddData
的viewDidLoad
或viewDidAppear
AddData
button的隐藏属性设置为true或false。
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) self.AddData.hidden = true }
你必须从UIViewController
types转换dataviewcontroller
,因为默认情况下,它将返回到没有AddData
button的父类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第二个在viewDidAppear
或viewDidLoad
中写入代码在dataviewcontrolleris中像luckyShubhra一样告诉:
class dataviewcontroller: UIViewController { @IBOutlet var AddData: UIButton! override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) self.AddData.hidden = needHideAddData } }
在scopeviewcontroller中创builddataviewcontroller的对象。 例如。 var dataVCObj = DataViewController(); 比使用对象dataVCObj,你可以访问button的iboutlet。 例如。 dataVCObj.AddData
- 当我使用自动布局选择每个单元格的高度(因此它们是动态的)时,它主要起作用,但有些单元格有点短。 为什么是这样?
- 如何在使用约束的表格视图单元格之间创build空间?
- 在SceneKit中点击/select节点(Swift)
- 如何将HEX转换为Objective-C中的NSString?
- Swift 4:扩展检查角半径,边框颜色和阴影
- 如果应用程序从任务pipe理器中被终止,NSUrlSession是否会继续文件传输?
- 如何修复setAllowsAnyHTTPSCertificate私有api用于Apple应用程序提交?
- iOS企业configurationconfiguration文件:我可以拥有多less个?
- 为什么我的原型单元格显示空白?