Xin xin chào chúng ta, hôm nay vào nội dung bài viết này mình sẽ chỉ dẫn những nhằm truyền dữ liệu từ một VC A -> VC B cùng ngược lại áp dụng segue.

Bạn đang xem: Segue là gì

Truyền tài liệu từ bỏ A -> B

Sử dụng SHOW SEGUE

Mình là một trong tín đồ chủ yếu về vấn đề thực hiện file xib, storyboard. Như trong một dự án công trình, lúc mình thích dịch chuyển đến một screen thì bản thân đang kéo segue bên trên storyboard đến nkhô nóng. Sau lúc đã kéo xong bản thân đã đánh tên mang lại segue identifier (sử dụng nhằm khẳng định coi chính là storyboard segue nào).

*
Lúc bấy giờ mình đang có 2 VC là A và B. Từ VC A mình bấm chuột button đang di chuyển sang trọng VC B và truyền theo 1 đoạn text thì mình vẫn làm cho như sau:

Trong VC A mình override lại func prepare for segue, làm việc vào function này mình hoàn toàn rất có thể kiểm tra theo segue identifier hoặc ko, bản thân có thể truyền dữ liệu đến VC cơ mà segue trỏ đến.,

import UIKitclass ViewControllerA: UIViewController override func viewDidLoad() super.viewDidLoad() // Do any additional thiết đặt after loading the view, typically from a nib. override func prepare(for segue: UIStoryboardSegue, sender: Any?) guard let vcB = segue.destination as? ViewControllerB else return vcB.initData(text: "Demo") Trong VC B, mình khởi chế tạo một function initData với một property tên là text để hứng dữ liệu từ VC A. Hàm initData sẽ được điện thoại tư vấn trươc lúc viewDidLoad đc Call vậy phải bọn họ luôn lấy đc text khác trống rỗng.import UIKitclass ViewControllerB: UIViewController var text = ""
IBOutlet weak var lbText: UILabel! override func viewDidLoad() super.viewDidLoad() // Do any additional cài đặt after loading the view. self.lbText.text = text func initData(text: String) self.text = text

Sử dụng modal segue

Trong dự án, câu hỏi thực hiện modal segue thường xuyên là bạn muốn present lên một VC B được embed trong navigation controller riêng lẻ cùng với VC hiện giờ. Dựa vào ví dụ bên trên, bản thân đã sửa lại storyboard với code trong VC A.
*

Trong VC A bây giờ bản thân vẫn sửa code lại nlỗi sau:

import UIKitclass ViewControllerA: UIViewController override func viewDidLoad() super.viewDidLoad() // Do any additional thiết lập after loading the view, typically from a nib. override func prepare(for segue: UIStoryboardSegue, sender: Any?) if let navigationController = segue.destination as? UINavigationController, let editContactViewController = navigationController.viewControllers.first as? ViewControllerB vcB.initData(text: "Demo")

Sử dụng code nỗ lực vày sử dụng segue

Hai cách sinh sống trên là mình hay thường dùng vì chưng bản thân là người dân có kiến thức sử dụng mọi gì đã làm được cấp cung cấp sẵn. Dường như, họ cũng có thể viết code nhằm truyền data từ bỏ VC A - > VC B
*
Hiện nay mình đã xoá đi segue đã sinh sản trước đó, và sửa code trong VC A nlỗi sau:

import UIKitclass ViewControllerA: UIViewController override func viewDidLoad() super.viewDidLoad() // Do any additional thiết lập after loading the view, typically from a nib.
IBkích hoạt func actionGoToVCB(_ sender: Any) let storyboard = UIStoryboard(name: "Main", bundle: nil) if let vcB = storyboard.instantiateViewController(withIdentifier: "ViewControllerB") as? ViewControllerB vcB.initData(text: "Demo") let navigationViewController = UINavigationController(rootViewController: vcB) show(navigationViewController, sender: nil)

Truyền tài liệu tự B -> A

Sử dụng unwind segue.

Xem thêm: Năm Sinh, Tên Thật, Chiều Cao Của Lương Bích Hữu, Tiểu Sử Lương Bích Hữu

Lúc bấy giờ chúng ta cần truyền tài liệu ngược tự B -> A. Mình thấy việc thực hiện segue này vẫn tất cả khá thọ, tuy nhiên cực kỳ không nhiều chúng ta biết đến nó.Thì thứ nhất, để áp dụng unwind segue, họ nên tạo thành 1 action ở vào VC A nlỗi sau:

import UIKitclass ViewControllerA: UIViewController
IBOutlet weak var lbPassBackText: UILabel! override func viewDidLoad() super.viewDidLoad() // Do any additional cài đặt after loading the view, typically from a nib. override func prepare(for segue: UIStoryboardSegue, sender: Any?) if let navigationController = segue.destination as? UINavigationController, let vcB = navigationController.viewControllers.first as? ViewControllerB vcB.initData(text: "Demo")
IBAction func unwindToVCA(_ unwindSegue: UIStoryboardSegue) if let vcB = unwindSegue.source as? ViewControllerB lbPassBackText.text = vcB.text Tiếp kia bản thân sửa lại storyboard như hình họa sau:

*
Tại trong storyboard bây giờ, mình gồm một bar button thành quả mang tên là Unwind Segue, bản thân sẽ cần kéo action của chính nó map cùng với action "unwindToVCA" vào ViewControllerA. Để có tác dụng đc thì mình sẽ lưu lại Ctrl với kéo nó vào phần exit của VC B trên storyboard.
*

Giờ trong VC B mình đang override thêm func prepare for segue

import UIKitclass ViewControllerB: UIViewController var text = ""
IBOutlet weak var lbText: UILabel! override func viewDidLoad() super.viewDidLoad() // Do any additional setup after loading the view. self.lbText.text = text func initData(text: String) self.text = text override func prepare(for segue: UIStoryboardSegue, sender: Any?) self.text = "LALALAALALA" => vì vậy là mình đã rất có thể truyền dữ liệu ngược trường đoản cú B -> A.

Xem thêm: Tiểu Sử Ca Sĩ Thanh Hoa Sinh Năm Bao Nhiêu, Tiểu Sử Ca Sĩ Trọng Tấn

Kết

Như làm việc bên trên tôi đã chỉ dẫn phương pháp để áp dụng segue vào vấn đề truyền dữ liệu thân 2 Vc A với B. Ngoài cách thực hiện unwind segue thì chúng ta còn có thể sử dụng các giải pháp khác như: delegate, closure...Cảm ơn các bạn đã đọc đến đây, hy vọng hầu như gì bản thân chia sẻ sống bên trên đang hoàn toàn có thể giúp các bạn được 1 chút ít.