如果从类的对象调用该函数,则无法构建UI

时间:2017-01-16 10:35:11

标签: ios swift uiview

我有一个创建UIButton的功能。我使用其类的对象在同一个类中调用该方法。

如果我使用其对象调用该函数,则不会创建任何UI。如果我调用该方法只是创建了self.createbutton()按钮。

class myClass: UIViewController {
  let mainview     = UIStackView()
  func createbutton() {
    let loadpageview = UIStackView()
    loadpageview.axis  = UILayoutConstraintAxis.vertical
    loadpageview.distribution  = UIStackViewDistribution.equalSpacing
    loadpageview.alignment = UIStackViewAlignment.center
    loadpageview.tag = 30
    loadpageview.spacing   = 16.0

    let buttn = UIButton()
    buttn.backgroundColor = .gray
    buttn.setTitle("testttt", for: .normal)
    buttn.frame.size.height = 30
    buttn.frame.size.width = 40
    buttn.addTarget(self, action: #selector(loginaction), for: .touchUpInside)

    loadpageview.addArrangedSubview(buttn)    
    mainview.addArrangedSubview(loadpageview)
  }

  func mainviewlet() {
    mainview.axis  = UILayoutConstraintAxis.vertical
    mainview.distribution  = UIStackViewDistribution.equalSpacing
    mainview.alignment = UIStackViewAlignment.center
    mainview.spacing   = 16.0
    mainview.tag = 50

    mainview.translatesAutoresizingMaskIntoConstraints = false;
    self.view.addSubview(mainview)
  }
}

如果我创建上述类的对象并调用createbutton(),则无法正常工作

override func viewDidLoad() {
  super.viewDidLoad()
  self.mainviewlet()
  let pl = myClass()
  pl.createbutton()
}

如果我按如下方式调用方法,它可以工作:

override func viewDidLoad() {
  super.viewDidLoad()
  self.mainviewlet()
  self.createbutton()
}

这里有什么问题?如何使用其对象调用方法。此外,我从另一个班级称呼它。因此我需要这个。谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

在第一个示例中,您正在创建另一个myClass()实例,并且将调用该引用中的方法。但是您希望在类的current实例中创建Button。

  override func viewDidLoad() {
      super.viewDidLoad()
      self.mainviewlet()
      let pl = myClass()
      pl.createbutton()
    }

但是在工作示例中,您指的是Class的当前实例。所以它创建的UIButton是可见的。

override func viewDidLoad() {
  super.viewDidLoad()
  self.mainviewlet()
  self.createbutton()
}

简单的OOPS

快乐编码

答案 1 :(得分:0)

要使其与另一个类的实例一起工作,请在单独的类中创建您的视图,例如MyView。然后创建一个将返回你的函数  要求的观点。然后从视图控制器中调用该类的对象上的该函数,您将获得视图,在您的情况下它是UIStackView,最后将其添加为视图控制器主视图的子视图。

Class MyView:NSObject{

    func createbuttonWith(stackView:UIStackView) {
      let loadpageview = UIStackView()
      loadpageview.axis  = UILayoutConstraintAxis.vertical
      loadpageview.distribution  = UIStackViewDistribution.equalSpacing
      loadpageview.alignment = UIStackViewAlignment.center
      loadpageview.tag = 30
      loadpageview.spacing   = 16.0

      let buttn = UIButton()
      buttn.backgroundColor = .gray
      buttn.setTitle("testttt", for: .normal)
      buttn.frame.size.height = 30
      buttn.frame.size.width = 40
      buttn.addTarget(self, action: #selector(loginaction), for: .touchUpInside)

    loadpageview.addArrangedSubview(buttn)    
    stackView.addArrangedSubview(loadpageview)
    }

    func mainviewlet()->UIStackView {
     let mainView =  UIStackView()

     mainview.axis  = UILayoutConstraintAxis.vertical
     mainview.distribution  = UIStackViewDistribution.equalSpacing
     mainview.alignment = UIStackViewAlignment.center
     mainview.spacing   = 16.0
     mainview.tag = 50

     mainview.translatesAutoresizingMaskIntoConstraints = false;
      return mainView
    } 
}

然后在你的视图控制器的viewDidLoad(),

let myView =  MyView()
let mainViewLet =  myView.mainviewlet()
self.view.addSubview(mainViewLet)
myView.createbuttonWith(mainViewLet)