2017-10-29 10 views
0

1つのビュー(送信ビュー)で2番目のビュー(受信ビュー)の外観を変更する必要がある、非常に簡単なプロジェクトがあります。私は委任を使用しようとしていますが、私はSendingVCで代入変数 "代理人"に問題があります。私は、オーバーライドfuncでそれをやろうとしましたが、ReceivingVCで "準備中"ですが、このメソッドは呼び出されません。Swift - TabBarを使用したデリゲートメソッド

私はこのコードは仕事ができると思うが、私はそれを置くべき場所わからない。:

let sendVC : SendingVC! = tabBarController?.viewControllers![1] as! SendingVC 
sendVC.delegate = self 

ReceivingVC:

import UIKit 

class ReceivingVC: UIViewController, DataSendDelegate { 

@IBOutlet weak var Label: UILabel! 

func userDidEnterData(data: String) { 
    Label.text = data 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let sendVC : SendingVC! = tabBarController?.viewControllers![1] as! SendingVC 
    sendVC.delegate = self 
} 
} 

SendingVC:

import UIKit 

protocol DataSendDelegate { 
func userDidEnterData(data: String) 
} 

class SendingVC: UIViewController { 
var delegate: DataSendDelegate? = nil 

override func viewDidLoad() { 
    super.viewDidLoad() 
} 

@IBAction func setTextButton(_ sender: UIButton) { 
    if delegate != nil { 
     delegate?.userDidEnterData(data: "some text") 
    } 
} 
} 

Storyboard img

+1

コードを画像の代わりにスニペットとして追加する必要があります。 –

+0

OK、編集しました – Michal

+0

ReceivingVCのviewDidLoadメソッドにコードを入れてみましたか? – bjd23

答えて

0

Th anks bjd23、それは完全に動作します。あなたはこのコードがある場合は ::だからソリューションはviewDidLoadメソッドに

編集し、それを入れているのviewDidLoad代わりのボタンアクションで

if delegate != nil { 
    delegate?.userDidEnterData(data: "some text") 
} 

を、私は、viewDidAppearまたはviewWillAppearにそれを置くことをお勧めしますあなたの送信ビューが最初にロードされた場合、何も起こらないため、

+0

"if"は完全に不要です。 'delegate?='すでにdelegate!= nil'の場合は、すでに_means_ 'です。 – matt

+0

ok、thanks matt – Michal

関連する問題