2017-01-16 2 views
0

私はUIButtonを作成する関数を持っています。私はそのクラスのオブジェクトを使って、同じクラスの中でそのメソッドを呼び出しています。クラスのオブジェクトから関数が呼び出された場合、UIを構築できません

オブジェクトを使用してその関数を呼び出すと、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

、それは別のクラスのインスタンスで動作するようにするには

+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) 
関連する問題