代码之家  ›  专栏  ›  技术社区  ›  hybrid Dev

从一个类调用IBMOutlet UIButton到另一个Viewcontroller

  •  1
  • hybrid Dev  · 技术社区  · 7 年前

    我有一个视图控制器叫做 dataviewcontroller scopeviewcontroller

    在里面 我有一个 IBOutlet 属于 UIButton AddData .我想在我的 scopeviewcontroller .我想隐藏那个按钮。

    我在我的 pager 添加数据 my中的按钮 scopeviewcontroller 在第三页。

    viewdidload 在我的 scopeviewcontroller

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

    请帮帮我!。。。谢谢

    4 回复  |  直到 7 年前
        1
  •  1
  •   Subramanian P    7 年前

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

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

    并实现协议 CAPSPageMenuDelegate公司

    extension scopeviewcontroller: CAPSPageMenuDelegate {
        func willMoveToPage(_ controller: UIViewController, index: Int) {
            self.AddData.isHidden = (index == 2)
        }
    }
    
        2
  •  0
  •   luckyShubhra    7 年前

    nib中的对象在加载该nib时实例化,并在创建对象后但将awakeFromNib发送给所有相关对象之前,立即将其分配给每个出口。

    here 详细说明。

    在你的情况下,你可以通过 bool var自 scopeviewcontroller dataviewcontroller AddData 中的按钮隐藏属性true或false 数据视图控制器 viewDidLoad viewDidAppear .

     override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        self.AddData.hidden = true
    }
    
        3
  •  0
  •   Salman Ghumsani    7 年前

    你必须键入演员表 dataviewcontroller 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 到IBOutlet,所以您只有两种方法来实现它:

    数据视图控制器 viewDidLoad 方法

    第二个写代码 viewDidAppear 在dataviewcontrolleris中,luckyShubhra告诉我们:

    class dataviewcontroller: UIViewController {
        @IBOutlet var AddData: UIButton! 
        override func viewDidAppear(_ animated: Bool) {
            super.viewDidAppear(animated)
            self.AddData.hidden = needHideAddData
        }
    }
    
        4
  •  0
  •   Bhawin Ranpura    7 年前

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