Bài 3.7 Segues và Navigation Controllers - Develop in Swift - Fundamentals

UIKit 3 Th09 2024

Bạn đã biết rằng view controller quản lý các scene khác nhau trong một ứng dụng. Nhưng khi ứng dụng của bạn trở nên phức tạp hơn, bạn sẽ thấy cần nhiều scene khác nhau sử dụng các view controller khác nhau để hiển thị thông tin. Bạn cũng sẽ cần chuyển đổi giữa các scene khác nhau để cho phép người dùng điều hướng ứng dụng.

Trong bài học này, bạn sẽ học cách sử dụng segue để chuyển đổi từ view controller này sang view controller khác, cách xác định mối quan hệ giữa các view controller và cách navigation controller có thể giúp bạn quản lý các scene hiển thị nội dung liên quan hoặc phân cấp.

Nội dung bạn sẽ học:

  • Cách di chuyển từ view controller này sang view controller khác.
  • Cách thêm và tùy chỉnh navigation controller.
  • Cách truyền thông tin từ view controller này sang view controller khác.

Từ vựng:

  • bar button
  • modal presentation
  • modal segue
  • navigation bar
  • navigation controller
  • pop
  • push
  • root view controller
  • segue
  • Show segue
  • unwind segue

Hãy xem các ứng dụng được sử dụng nhiều nhất trên điện thoại của bạn. Có ứng dụng nào chỉ có một màn hình luôn trông giống nhau không? Chắc là không. Hầu hết các ứng dụng đều có nhiều scene để hiển thị các loại thông tin khác nhau. Mỗi scene này được hỗ trợ bởi một instance hoặc class view controller riêng biệt.

Công việc của bạn với tư cách là nhà phát triển là cho phép người dùng di chuyển dễ dàng từ scene này sang scene khác. Bạn có thể sử dụng Interface Builder để thêm segue hoặc chuyển đổi giữa các scene khác nhau. Bạn cũng có thể tạo mối quan hệ đặc biệt giữa các scene có nội dung liên quan bằng cách đưa chúng vào navigation controller.

Sau khi tìm hiểu về các loại segue khác nhau, bạn sẽ học cách tạo segue giữa các scene khác nhau trong navigation controller. Khi bạn đã thành thạo việc sử dụng seguenavigation controller, bạn sẽ có thể xây dựng các giao diện và cấu trúc điều hướng phức tạp hơn, từ đó trang bị cho bạn khả năng xây dựng các ứng dụng mạnh mẽ hơn.

Segues

Segue xác định chuyển đổi từ view controller này sang view controller khác. Nó thường bắt đầu khi người dùng nhấn vào button hoặc table row và kết thúc khi một view controller mới được hiển thị. Tương tự như việc tạo outletaction, bạn xác định segue trong Interface Builder bằng cách kết nối điểm bắt đầu và điểm kết thúc, nhấp và kéo từ scene này sang scene khác. Bạn cũng có thể kích hoạt segue bằng code.

Ngoài chuyển đổi, segue còn xác định phương thức hiển thị của view controller. Một phương thức phổ biến là modal presentation, đặt view controller mới lên trên view controller trước đó. Trên màn hình nhỏ hơn, modal presentation sẽ luôn xuất hiện ở chế độ toàn màn hình. Để điều chỉnh giao diện cho các thiết bị lớn hơn, bạn có thể tùy chỉnh modal presentation để xuất hiện dưới dạng popover, form sheet hoặc full-screen presentation.

Khi tìm hiểu về navigation controller ở phần sau của bài học này, bạn cũng sẽ học về push transition, tạo hiệu ứng cho view controller mới từ phải sang trái trên màn hình.

Khi một view controller mới được hiển thị theo kiểu modal, bạn có thể sử dụng unwind segue để cho phép người dùng đóng view controller mới và quay lại view controller trước đó.

Tạo Segues được kích hoạt

Để thực hành chuyển đổi giữa các view controller, bạn sẽ tạo một ứng dụng đơn giản thay đổi màu sắc của đèn giao thông. Bắt đầu bằng cách tạo một dự án Xcode mới bằng template iOS App. Đặt tên cho dự án là “TrafficSegues.” Khi tạo dự án, hãy đảm bảo interface option được đặt thành Storyboard. Chọn storyboard Main trong Project navigator để mở dự án của bạn trong Interface Builder.

Thêm một UIButton vào giữa view, sử dụng alignment guide để định vị. Nhấp vào button Align và chọn “Horizontally in Container” và “Vertically in Container” để tạo hai ràng buộc để căn giữa button cho tất cả các kích thước màn hình.

Tìm View Controller trong Object library và kéo đối tượng này vào canvas, định vị nó ở bên phải của view controller đầu tiên. Sử dụng Attributes inspector, hãy cho view controller bên trái nền màu đỏ và view controller bên phải nền màu vàng. (Ảnh chụp màn hình sử dụng tông màu sáng hơn để cung cấp thêm độ rõ nét.)

Hãy tưởng tượng bạn muốn chuyển sang view controller màu vàng khi người dùng nhấn vào UIButton của bạn trong view controller màu đỏ. Giữ phím Control, chọn button và kéo con trỏ đến view controller thứ hai. Hành động này sẽ làm nổi bật view controller màu vàng, cho biết đó là điểm kết thúc hợp lệ cho segue.

Khi bạn thả button chuột hoặc trackpad, bạn sẽ thấy một popover cho phép bạn chỉ định phương thức hiển thị của segue. Có nhiều segue để lựa chọn, nhưng hãy tập trung sự chú ý của bạn vào “Present Modally” và “Show.” “Present Modally” sẽ hiển thị view controller màu vàng trên màu đỏ, sử dụng hiệu ứng trượt từ dưới lên trên. Bạn sẽ thấy hiệu ứng này trong ứng dụng Mail khi bạn bắt đầu viết email mới hoặc trong Danh bạ khi bạn chọn tạo liên hệ mới.

Segue Show cũng hiển thị theo kiểu modal cho đến khi navigation controller được thêm vào scene storyboard. Bạn sẽ thêm một trong số này sau trong bài học. Bây giờ, hãy chọn Show. Một mũi tên xuất hiện từ view controller màu đỏ đến view controller màu vàng cho biết segue.

Xây dựng và chạy ứng dụng của bạn. Khi bạn nhấp vào UIButton của mình, bạn sẽ thấy view màu vàng được tạo hiệu ứng, từ dưới lên, trên cùng của view màu đỏ.

Bây giờ, hãy thêm view controller thứ ba, định vị nó ở bên phải của view màu vàng. Đặt màu nền của nó thành màu xanh lá cây. Như trong các bước trước, hãy thêm UIButton vào view màu vàng, tạo ràng buộc căn giữa, sau đó Control-drag từ button đến view controller màu xanh lá cây và xác định Show segue.

Khi bạn xây dựng và chạy ứng dụng của mình, nhấn vào button trên view controller màu đỏ sẽ hiển thị theo kiểu modal view controller màu vàng và nhấn vào button trên view controller màu vàng sẽ hiển thị theo kiểu modal view controller màu xanh lá cây.

Lưu ý rằng view controller màu đỏ thuộc loại ViewController. Bạn không gán class cho view controller màu vàng và màu xanh lá cây, vì vậy chúng sẽ là instance UIViewController chung. Sự phân biệt này sẽ rất quan trọng khi bạn triển khai unwind segue.

Unwind Segue

Bạn vừa tạo một chuỗi segue ngắn. Mặc dù người dùng có thể vuốt xuống để đóng các view này, nhưng cách tốt nhất là luôn bao gồm button để đóng modal view. Để thực hiện việc này, bạn cần tạo unwind segue. Trong khi segue chuyển sang scene khác, unwind segue chuyển đổi từ scene hiện tại để quay lại scene đã hiển thị trước đó.

Để bắt đầu, hãy chọn ViewController trong Project navigator và thêm phương thức sau ngay bên dưới hàm viewDidLoad():

@IBAction func unwindToRed(unwindSegue: UIStoryboardSegue) {

}

Bạn có thể đặt tên cho phương thức bất kỳ tên nào bạn muốn, nhưng nó phải nhận UIStoryboardSegue làm tham số duy nhất.

Unwind segue có thể khó hiểu lúc ban đầu. Bằng cách thêm một hàm nhận UIStoryboardSegue làm tham số vào định nghĩa view controller của bất kỳ scene nào, bạn đang thông báo cho Interface Builder rằng scene đó là đích đến hợp lệ cho unwind segue.

Trong bài học này, phương thức bạn vừa thêm không chứa bất kỳ code nào, nhưng nó có thể được sử dụng để chuyển thông tin từ điểm kết thúc của segue trở lại view controller nguồn.

Hãy xem cách thức hoạt động. Quay lại storyboard Main, thêm một button vào giữa view màu xanh lá cây. Cập nhật văn bản của button thành “Dismiss.”

Control-drag button Dismiss đến đối tượng Exit ở đầu scene view controller. Khi bạn thả button chuột hoặc trackpad, một popover sẽ xuất hiện, liệt kê tất cả các đích đến khả dụng để unwind. Trong trường hợp này, chỉ có một tùy chọn: unwindToRedWithUnwindSegue, khớp với method signature bạn đã đặt trong định nghĩa của ViewController. Hãy tiếp tục và chọn nó.

Xây dựng và chạy ứng dụng của bạn. Khi bạn nhấp vào button Dismiss, nó sẽ unwind toàn bộ trở lại view controller màu đỏ.

Modal segue là phương pháp được ưu tiên để chuyển đổi từ ngữ cảnh này sang ngữ cảnh khác trong ứng dụng của bạn. Ví dụ: trong ứng dụng iOS Mail, nhấn vào button Compose 􀈎 chuyển từ chế độ đọc tin nhắn sang chế độ viết tin nhắn. Button Cancel luôn khả dụng nếu người dùng chọn quay lại ngữ cảnh trước đó.

Tuy nhiên, một số trường hợp yêu cầu segue từ view controller này sang view controller liên quan. Ví dụ: khi người dùng nhấn vào một cell trong Settings, một view controller mới được tạo hiệu ứng từ phải sang trái để bao phủ màn hình, trực quan thêm vào stack của các view controller được hiển thị. Việc thêm view controller mới lên đầu stack được gọi là pushing vào stack. Video sau minh họa hiệu ứng mặc định của push transition so với modal transition trong ứng dụng SettingsShortcuts.

Nhấn vào button Back ở góc trên cùng bên trái hoặc vuốt trở lại sẽ đóng view trên cùng và quay lại view controller cao hơn tiếp theo, tạo hiệu ứng từ trái sang phải. Việc đóng view controller từ đầu stack được gọi là popping khỏi stack.

Navigation controller quản lý stack của các view controller và cung cấp hiệu ứng khi điều hướng giữa các view liên quan.

Một cách khác để hình dung về navigation controller là nó phản ánh cấu trúc dữ liệu phân cấp. Trong trường hợp của Mail, danh sách tài khoản (gốc) cho phép bạn nhấn để hiển thị các thư mục của tài khoản. Nhấn vào mỗi thư mục sẽ hiển thị các tin nhắn của nó. Settings cũng tương tự. Có một danh sách các danh mục cài đặt (gốc) mà một trong số đó có thể được chọn để hiển thị các cài đặt hoặc danh mục con bên trong, mỗi lần di chuyển sâu hơn vào cấu trúc phân cấp. Đối với ví dụ ở trên, từ gốc, General được chọn và sau đó là Accessibility trong đó. Pushing một view controller vào stack sẽ đi sâu hơn vào cấu trúc phân cấp và popping một view controller khỏi stack sẽ di chuyển ngược lên cấu trúc phân cấp đến gốc.

Quay lại dự án TrafficSegues của bạn, bạn có thể sử dụng navigation controller để quản lý màn hình màu đỏ, vàng và xanh lá cây. Màu đỏ sẽ push sang màu vàng và màu vàng sẽ push sang màu xanh lá cây.

Để thêm navigation controller vào scene của bạn, hãy chọn view controller màu đỏ. Tiếp theo, nhấp vào button Embed In trong thanh công cụ phía dưới và chọn Navigation Controller. Ngoài ra, hãy chuyển đến thanh menu Xcode và chọn Editor > Embed In > Navigation Controller.

Một trong hai phương pháp này sẽ đặt navigation controller ở đầu scene và đặt view controller màu đỏ làm gốc của nó.

Xây dựng và chạy ứng dụng của bạn để xem những gì đã thay đổi. Bạn có thể nhận thấy một số điểm khác biệt quan trọng:

  • Show segue giữa các view controller màu đỏ, vàng và xanh lá cây đã được điều chỉnh thành Show (Push), thay vì Present Modally. 􀀻 (Đây là tính năng chính của Show segue: Nó điều chỉnh phương thức hiển thị tùy thuộc vào việc nó được sử dụng trong navigation controller hay độc lập.)
  • Button Dismiss vẫn unwind trở lại view controller màu đỏ, nhưng nó thực hiện bằng cách popping các view controller thay vì đóng chúng.
  • Ở đầu mỗi viewnavigation bar trong suốt, cung cấp không gian cho button Back cũng như tiêu đề và các button bổ sung.
  • Document Outline hiện bao gồm Navigation Controller Scene, bao gồm Navigation Bar.

Một trong những tính năng dễ nhận thấy nhất của navigation controllernavigation bar, xuất hiện ở đầu màn hình. Navigation bar có thể hiển thị tiêu đề và/hoặc các button item.

Chọn navigation bar trong Document Outline và xem Attributes inspector để xem thuộc tính nào bạn có thể tùy chỉnh, chẳng hạn như tint color, title colortitle font của thanh. (Bạn cũng có thể chọn sửa đổi các thuộc tính này trong code.) Xem tài liệu cho UINavigationBar để biết danh sách đầy đủ các thuộc tính có thể tùy chỉnh.

Mỗi UIViewController đều có navigationItem mà bạn có thể sử dụng để tùy chỉnh navigation bar của nó. 􀀻 Khi bạn thêm navigation controller trong bước trước đó, Interface Builder sẽ tự động thêm navigation item vào view controller gốc (màu đỏ).

Trong Document Outline, hãy chọn navigation item cho view controller màu đỏ và mở Attributes inspector. Nhập “Red” vào thuộc tính Title.

Xây dựng và chạy ứng dụng. Khi bạn push sang màn hình màu vàng, bạn sẽ nhận thấy rằng button Back hiện hiển thị “Red.” Điều đó xảy ra như thế nào? Button Back đã sử dụng tiêu đề của view controller trước đó làm văn bản của nó. Tuy nhiên, nếu view controller trước đó không có tiêu đề, button Back sẽ chỉ hiển thị “Back.” Nếu bạn muốn button Back sử dụng văn bản khác, chẳng hạn như “Go To Red,” bạn có thể nhập nó vào trường Back Button trong Attributes inspector của navigation item view controller màu đỏ. 􀀻

Trong một số trường hợp nhất định, Interface Builder sẽ thêm navigation item vào view controller. Trong trường hợp nó chưa có, bạn có thể tự thêm một cái bằng cách tìm Navigation Item trong Object library và kéo nó lên trên view controller của bạn.

Đặt tiêu đề của view controller màu vàng và màu xanh lá cây bằng cách chọn Navigation Item của chúng và sử dụng Attributes inspector để tạo tiêu đề “Yellow” và “Green.”

Ngoài tiêu đề và button Back, navigation item có thể bao gồm một loại button đặc biệt, được gọi là bar button, có thể xuất hiện trên navigation bar hoặc toolbar. Tìm Bar Button Item trong Object library và đặt một cái ở góc trên cùng bên phải của navigation bar view controller màu xanh lá cây. 􀀻

Nhấp vào bar button bạn vừa thêm và mở Attributes inspector. Trong menu bật lên System Item, bạn sẽ thấy các lựa chọn button thường được sử dụng, chẳng hạn như Add, SaveCancel. Chọn một hoặc hai để xem văn bản button thay đổi. Hãy thử với các thuộc tính StyleTint. Các thuộc tính Bar Item cho phép bạn tùy chỉnh button của mình hơn nữa. Ví dụ: bạn có thể sử dụng trường Image để thay thế tiêu đề văn bản bằng hình ảnh hoặc biểu tượng.

Bây giờ, hãy tiếp tục và cập nhật thuộc tính Title của bar item thành “Pop.” (Lưu ý rằng bản cập nhật này thay đổi tùy chọn System Item thành Custom.)

Tiếp theo, bạn có thể kết nối bar button mới này với unwind segue. Tham khảo các bước tương tự bạn đã sử dụng để kết nối button Dismiss. Sau khi hoàn tất, bạn có thể xóa button Dismiss.

Storyboard của bạn hiện đã có tất cả các segue của nó. 􀀻 Xây dựng và chạy ứng dụng của bạn để xem các tiêu đề và button bạn vừa thêm. Lưu ý rằng nhấp vào button Pop sẽ đưa bạn trở lại view controller màu đỏ.

Large Titles

Bạn có thể đã nhận thấy trong các ứng dụng hệ thống như Settings rằng tiêu đề navigation bar trên màn hình chính xuất hiện lớn hơn nhiều so với trong các scene tiếp theo. Tiêu đề lớn này có thể được thêm vào ứng dụng của riêng bạn bằng cách chọn navigation bar trong Interface Builder, sau đó chọn hộp “Prefers Large Titles” trong Attributes inspector. 􀀻

Lưu ý rằng tất cả các tiêu đề của bạn, không chỉ tiêu đề của view controller đầu tiên, hiện đã áp dụng tiêu đề lớn. Bạn có thể điều chỉnh view controller nào sử dụng tùy chọn tiêu đề lớn bằng cách chọn navigation item được đề cập và chọn một trong các tùy chọn từ menu thả xuống Large Title trong Attributes inspector. 􀀻

Tùy chọn Always sẽ đảm bảo rằng tiêu đề của navigation item đó sẽ luôn lớn; tùy chọn Never sẽ đảm bảo rằng tiêu đề của navigation item đó sẽ không bao giờ lớn; và tùy chọn Automatic sẽ áp dụng hành vi của view controller trước đó trong navigation stack. Trừ khi bạn có lý do cụ thể để làm khác đi, cách thực hành tốt nhất là để view controller gốc áp dụng tiêu đề lớn và các view controller tiếp theo áp dụng tiêu đề nhỏ hơn.

Truyền thông tin

Trong nhiều ứng dụng, bạn sẽ cần chuyển thông tin từ view controller này sang view controller khác trước khi segue diễn ra. Ví dụ: khi bạn nhấn vào một tên trong ứng dụng Danh bạ, chi tiết về liên hệ cần được chuyển tiếp đến màn hình Thông tin trước khi nó được hiển thị.

Để tìm hiểu cách thức hoạt động, bạn sẽ cập nhật view controller màu đỏ để bao gồm text field ngoài button. Khi button được nhấn, kích hoạt segue, Interface Builder sẽ sử dụng bất kỳ văn bản nào trong text field làm tiêu đề cho navigation item của view controller màu vàng.

Bắt đầu bằng cách kéo text field từ Object library vào view controller màu đỏ, định vị nó ngay phía trên button. Đối với ví dụ này, đừng lo lắng về việc thêm ràng buộc. 􀀻

Tạo outlet cho text field, đặt tên là “textField.” 􀀻 Bạn sẽ cần tham chiếu đến text field trong code để có thể truy cập văn bản và cập nhật tiêu đề của đích đến cho phù hợp.

Bây giờ bạn sẽ thiết lập segue để chuyển văn bản từ text field sang view controller màu vàng.

Mỗi UIViewController đều có một phương thức, prepare(for:sender:), được gọi trước khi segue từ view controller diễn ra. Bắt đầu nhập “prepare” gần cuối định nghĩa ViewController, nhưng trước dấu ngoặc đóng. Xcode sẽ đề nghị giúp bạn hoàn thành tên phương thức. Chọn prepare(for segue: UIStoryboardSegue, sender: Any?) và nhấn phím Return để thêm phương thức. 􀀻

Tham số đầu tiên của phương thức này là chính segue. Segue chứa một số thuộc tính giúp chuyển thông tin qua nó:

  • identifier — Tên của segue, phân biệt nó với các segue khác. Bạn có thể đặt thuộc tính này trong Interface Builder bằng cách sử dụng Attributes inspector.
  • destinationView controller sẽ được hiển thị sau khi segue hoàn tất. Trong khi giá trị là UIViewController, bạn có thể cần ép kiểu nó thành subclass UIViewController cụ thể để truy cập các thuộc tính chỉ có thể truy cập trên subclass đó.

Vì chỉ có một segue trên view controller màu đỏ, nên không cần identifier. Và vì mục tiêu của bạn là cập nhật thuộc tính title của navigation item và mọi UIViewController đều có thuộc tính này, nên không cần ép kiểu. Vì vậy, code để đặt tiêu đề của navigation item đích đến khá đơn giản:

override func prepare(for segue: UIStoryboardSegue,
    sender: Any?) {
    segue.destination.navigationItem.title = textField.text
}

Xây dựng và chạy ứng dụng của bạn. Sau đó, nhập một chuỗi ngắn vào text field. Khi bạn nhấn button, phương thức bạn vừa thêm sẽ cập nhật tiêu đề trên màn hình màu vàng.

Viết code để truyền dữ liệu giữa các scene có thể hơi khó khăn lúc đầu. Nhưng bạn sẽ khám phá ra rằng việc truyền dữ liệu giữa các màn hình cực kỳ hữu ích và sẽ cho phép bạn viết code rất linh hoạt. Bạn sẽ tiếp tục làm việc với việc truyền thông tin bằng segue trong dự án Personality Quiz.

Tạo Segues bằng code

Đôi khi bạn sẽ cần sử dụng một số logic để xác định có nên thực hiện segue hay không. Mọi segue mà bạn đã tạo tại thời điểm này đều liên quan đến việc kéo từ button đến view controller. Khi bạn tạo segue theo cách này, nó sẽ luôn được thực hiện khi button được nhấn. Trong phần này, bạn sẽ xác định một số segue chung chung giữa các view controller và quyết định bằng code xem chúng có nên được thực hiện hay không.

Trước khi bắt đầu, hãy khôi phục ứng dụng của bạn về trạng thái ban đầu. Xóa tất cả segue, controllabel hiện có khỏi storyboard của bạn. Bạn cũng cần xóa mọi outlet bạn đã tạo, cũng như các phương thức prepare(for:sender:)unwindToRed(segue:). Ứng dụng của bạn sẽ trông như thế này khi bạn đã sẵn sàng:

Trong ví dụ này, bạn sẽ đặt hai button trên view controller màu đỏ. Một button sẽ segue sang màn hình màu vàng và button còn lại sẽ segue sang màu xanh lá cây. Giao diện người dùng cũng sẽ bao gồm UISwitch sẽ xác định xem có nên thực hiện segue hay không. Nếu switch được bật, segue có thể được thực hiện; ngược lại, sẽ không có segue nào diễn ra.

Bắt đầu bằng cách đặt hai button và một switch từ Object library vào view màu đỏ. Cập nhật tiêu đề của một button thành “Push to Yellow” và button còn lại thành “Push to Green.” Đặt switch bên dưới các button, như được hiển thị. 􀀻 Trong ví dụ này, đừng quá lo lắng về việc tạo ràng buộc để định vị view cho mọi kích thước và hướng màn hình.

Thay vì Control-dragging từ các button đến các view controller, bạn sẽ muốn Control-drag từ view controller màu đỏ đến view controller màu vàng và màu xanh lá cây. Bằng cách đó, bạn đang xác định hai segue chung chung: một segue di chuyển từ màu đỏ sang màu vàng và một segue khác di chuyển từ màu đỏ sang màu xanh lá cây. Control-drag từ biểu tượng view controller ở đầu màn hình màu đỏ đến view controller màu vàng và tạo Show segue, sau đó lặp lại bước này cho view controller màu xanh lá cây. 􀀻

Để thực hiện segue trong code, bạn sẽ cần cung cấp cho mỗi segue một chuỗi identifier hợp lệ. Chọn chính segue bằng cách nhấn vào dòng segue. 􀀻 Trong Attributes inspector, hãy đặt tên cho một identifier là “Yellow” và identifier còn lại là “Green.” 􀀽

Bạn sẽ cần kiểm tra trạng thái của UISwitch trong code để xác định có nên thực hiện segue hay không. Để thực hiện việc này, bạn sẽ cần tạo outlet cho switch. Mở assistant editorControl-drag từ switch đến vị trí hợp lệ trong định nghĩa ViewController.

@IBOutlet var segueSwitch: UISwitch!

Tạo action cho mỗi button bằng cách Control-dragging từ button đến vị trí hợp lệ trong định nghĩa ViewController.

@IBAction func yellowButtonTapped(_ sender: Any) {

}

@IBAction func greenButtonTapped(_ sender: Any) {

}

Để thực hiện segue bằng code, có một phương thức tồn tại trên các view controller có tên là performSegue(withIdentifier:sender:). Tham số đầu tiên cho phương thức này nhận một String, tương ứng với identifier mà bạn đã gán cho segue trong Attributes inspector. Tham số sender là thông tin bổ sung mà bạn có thể cung cấp cho segue liên quan đến control nào đã kích hoạt segue, nhưng nó không cần thiết trong ví dụ này và có thể được đặt thành nil.

Gọi performSegue(withIdentifier:, sender:) trong mỗi phương thức chỉ khi switch được đặt ở vị trí “On”.

@IBAction func yellowButtonTapped(_ sender: Any) {
    if segueSwitch.isOn {
        performSegue(withIdentifier: "Yellow", sender: nil)
    }
}

@IBAction func greenButtonTapped(_ sender: Any) {
    if segueSwitch.isOn {
        performSegue(withIdentifier: "Green", sender: nil)
    }
}

Xây dựng và chạy ứng dụng của bạn. Khi bạn nhấn vào mỗi button, action tương ứng sẽ được kích hoạt. Mỗi action kiểm tra trạng thái của switch và thực hiện segue phù hợp nếu switch được bật.

Nhớ lại rằng thuộc tính identifier của UIStoryboardSegue được truyền cho prepare(for:sender:) cho bạn biết tên của segue sắp được thực hiện. Kiểm tra tài liệu API cho shouldPerformSegue(withIdentifier:sender:). Làm cách nào bạn có thể di chuyển kiểm tra segueSwitch.isOn sang shouldPerformSegue(withIdentifier:sender:) thay vì bên trong action của mỗi button?

Tags

Tony Phạm

Là một người thích vọc vạch và tò mò với tất cả các lĩnh vực từ khoa học tự nhiên, lập trình, thiết kế đến ... triết học. Luôn mong muốn chia sẻ những điều thú vị mà bản thân khám phá được.