私はiOSアプリケーション用に以下のレイアウトを持っています。1つのView Controllerを別のコントローラから制御するにはどうすればよいですか?
私は何をするつもりだがグリーンのViewControllerを制御するためにpurpleVCにテーブルビューを入れている...トップpeachVCは変更する必要がありますその中にテキストを持つことになります。私はちょうど別のビューコントローラからどのように1つのビューコントローラを制御するか分からない。これには、GreenVCのボタンがクリックされたときに紫色のスライドを出し入れすることが含まれます。私はこれを行うクラスがあることを知っているが、私は同様に学びたい。
TESTINGデリゲート:
MAINVIEWののcontroler
import UIKit
protocol Purpleprotocol {
func buttonpressed()
}
protocol Greenprotocol {
}
extension UIViewController {
func alert(message: String, title: String = "") {
let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
let OKAction = UIAlertAction(title: "OK", style: .default, handler: nil)
alertController.addAction(OKAction)
self.present(alertController, animated: true, completion: nil)
}
}
class MainViewController: UIViewController,Purpleprotocol,Greenprotocol {
weak var infoNav : UINavigationController?
weak var greenVC: GreenVC?
weak var purpleVC: PurpleVC?
weak var peachVC: PeachVC?
func buttonpressed() {
alert(message: "This is message")
print("buttonpressed")
let date = Date()
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date)
let minutes = calendar.component(.minute, from: date)
greenVC?.greenlabel.text = String(hour) + ":" + String(minutes)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "contentSegue" {
let infoNav = segue.destination as! UINavigationController
}
}
}
PURPLEVIEWののcontroler
class PurpleVC: UIViewController {
var delegate: Purpleprotocol?
@IBAction func butclick(_ sender: UIButton) {
alert(message: "infunction")
delegate?.buttonpressed()
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
おかげ R
ナビゲーションコントローラ経由で動作するかどうかは十分にはわかりませんが、似たような操作を行っていますが、一方のView Controllerからもう一方のView Controllerに直接接続しています。基本的には、デリゲートを作成し、2番目のVCのデリゲートに準拠させることでした。最初のVCは、2番目のViewコントローラのメソッドを起動し(希望の方法でコントロールします)、次にsegueを実行したいときに、変更された2番目のVCをロードして表示します。 似たようなものがあなたに役立つかもしれません。 –