2017-01-16 4 views
0

У меня есть функция для создания 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() 
} 

Что случилось Вот ? Как я могу вызвать метод, используя его объект. Далее я называю это из другого класса. Поэтому мне это нужно. Спасибо за любую помощь!

ответ

0

В первом примере Вы создаете еще один экземпляр myClass() и вызывается метод в этой ссылке. Но вам нужна ваша кнопка, созданная в экземпляре класса current.

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

Но в рабочем примере вы ссылаетесь на текущий экземпляр класса. Таким образом создается UIButton, который он создает.

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

Его Простой OOPS

Счастливый Coding

+0

как я могу заставить его работать с другим экземпляром? Является ли это возможным ? – SunShine

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)