Bảng phân cảnh Xcode 4.5 'Thoát'


102

Tôi vừa cài đặt Xcode 4.5 để hỗ trợ iOS6 và tôi đã thấy một biểu tượng mới có tên là 'Thoát' trong Bảng phân cảnh của mình, được liệt kê trong bộ điều khiển chế độ xem của tôi cùng với 'Người trả lời đầu tiên', v.v. Một biểu tượng nhỏ màu xanh lục có nhãn 'Thoát'.

Tôi có thể tìm thấy bất cứ thứ gì trên đó cũng như không biết cách sử dụng nó.

Bất cứ ai biết bất cứ điều gì về nó, nó hoạt động như thế nào, nó để làm gì?


1
Đối với một câu hỏi tương tự, tôi đã đăng câu trả lời này: stackoverflow.com/questions/12569316/… Nó giúp giải thích cách sử dụng tính năng thoát (thư giãn)
Eric

Câu trả lời:


72

Điều này được gọi là " Unwind Segue ". Thật không may cho đến nay không có tài liệu nào về vấn đề này ngoại trừ một đề cập ngắn gọn về danh sách các tính năng mới của XCode 4.5 nêu rõ:

Unwind segues có thể cho phép chuyển sang các trường hợp cảnh hiện có trong bảng phân cảnh

Tin tốt là có một phiên từ WWDC 2012 giải thích những sinh vật đó (trong số những thứ khác).

Bạn chỉ có thể đăng nhập vào Trung tâm nhà phát triển iOS của Apple bằng thông tin chi tiết về tài khoản nhà phát triển của mình, sau đó truy cập trang video WWDC 2012 và xem "Áp dụng bảng phân cảnh trong ứng dụng của bạn" (phần thứ năm từ trên xuống). .


Cập nhật: Đây là một số thông tin khác về chủ đề này từ tài liệu của Apple

Một đối tượng giữ chỗ có tên Exit để giải nén các chuỗi. Theo mặc định, khi người dùng loại bỏ một cảnh con, bộ điều khiển chế độ xem cho cảnh đó sẽ tháo (hoặc quay lại) cảnh mẹ — đó là cảnh ban đầu được chuyển sang cảnh con. Tuy nhiên, đối tượng Exit cho phép bộ điều khiển chế độ xem có thể quay trở lại một cảnh tùy ý.

(Từ docset iOS6> Chung> Bắt đầu)

Và đây là một ví dụ hay về cách bạn có thể triển khai


Cập nhật khác:

Đây là một lưu ý kỹ thuật từ Apple về chủ đề này.


3
OK, vậy bạn sử dụng nó như thế nào? Đã thử kiểm soát nhấp chuột từ đối tượng thoát ở cuối bộ điều khiển chế độ xem, nhưng nó sẽ không liên kết với bất kỳ thứ gì.
shim

4
Về cơ bản, bạn phải xác định một phương thức cho khu vực thư giãn của mình và sau đó kết nối từ một phần tử đến exitnút chọn phương thức bạn muốn gọi. Bạn có thể tìm thấy một ví dụ ở đây (tôi đã cập nhật câu trả lời của tôi cũng như để bao gồm ví dụ)
Alladinian

1
-1: Nhiều từ, ít thông tin hữu ích. Sau khi đọc lên về vấn đề này và sử dụng nó trong ứng dụng của riêng tôi, tôi đã viết lên câu trả lời này là hy vọng hữu ích hơn: stackoverflow.com/a/25829835/901641
ArtOfWarfare

1
Đây là lý do tại sao tôi yêu thích các tài liệu không tồn tại của Apple. Trời đất, ai đó nên bị sa thải ở đó.
Duck

@SpaceDog Có lẽ đó là những gì đã xảy ra, tất cả đều bị sa thải và không ai còn lại để viết tài liệu: / Tôi thích video WWDC - 2012 rõ ràng là năm mà Apple đạt đến đỉnh cao.
turingtested

10

Hãy tưởng tượng bạn có một chuỗi các lượt xem trong bảng phân cảnh của mình:

A -> ... -> Z

Bạn muốn có một nút trên chế độ xem Zcho phép người dùng quay trở lại tất cả A.

Vì vậy, những gì bạn cần làm là cung cấp cho khung nhìn mà bạn muốn quay lại, trong trường hợp này A, một phương thức thể hiện được đánh dấu là a IBActionvà nhận vào một tham số duy nhất của kiểu UIStoryboardSegue *. Tên của phương thức và biến không quan trọng. Những gì bạn làm trong quá trình triển khai cũng không quan trọng. Đây là một ví dụ:

Object-C: Giao diện của
In A(not Z's):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue;

Trong A(không phải Z) triển khai:

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue {
    // Only "implemented" to satisfy a respondsToSelector: search.
    // You can actually implement more stuff here, if you want, IE, if
    // you need to reach out to a server to mention that this screen was
    // returned to from a later screen.
}

Swift:
Trong Anguồn của (not Z's):

@IBAction func cancelSignup(unwindSegue: UIStoryboardSegue) {
    // Only "implemented" to satisfy a respondsToSelector: search.
    // You can actually implement more stuff here, if you want, IE, if
    // you need to reach out to a server to mention that this screen was
    // returned to from a later screen.
}

Bây giờ, trong bảng phân cảnh của bạn, hãy controlkéo từ một phần tử trên Z(IE, nút hủy) sang Z's Exit. Nó sẽ quét qua tất cả các chế độ xem cao hơn trong hệ thống phân cấp chế độ xem có chế độ xem IBActionchỉ chấp nhận UIStoryboardSegue *một hành động duy nhất và liệt kê chúng để bạn chọn.

Hy vọng rằng điều này thẳng thắn và hữu ích hơn các câu trả lời hiện có. Tôi nhận thấy rằng liên kết này đặc biệt hữu ích, vì vậy nếu có một chi tiết nào bạn vẫn còn mờ nhạt sau khi đọc câu trả lời của tôi, có thể điều này có thể giúp bạn (tôi đã cố gắng cô đọng tất cả thông tin hữu ích từ bài viết dài này thành một câu trả lời ngắn gọn): http://www.freelancemadscience.com/fmslabs_blog/2012/9/24/advanced-storyboard-techniques.html


4

Xem thêm Cannot Connect Storyboard Unwind Segue làm rõ các yêu cầu để làm cho biểu tượng Thoát hoạt động. Bạn phải có, cao hơn trong hệ thống phân cấp bộ điều khiển chế độ xem, một phương pháp:

  1. Được đánh dấu là IBAction

  2. Nhận một tham số là UIStoryboardSegue *

Nếu cả hai điều kiện đó được đáp ứng, biểu tượng Thoát sẽ nhìn thấy nó và cho phép bạn kết nối với nó bằng cách kéo điều khiển từ một nút trong cùng một bộ điều khiển chế độ xem.

Bây giờ tôi cũng đã đăng ví dụ đơn giản nhất trên thế giới ở đây:

https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p638presentedViewControllerStoryboard (cố định ngày 12 tháng 7 năm 2013)

Điều này cho thấy giờ đây việc xác định tới và lui từ một bộ điều khiển chế độ xem được trình bày dễ dàng như thế nào , trái ngược với tất cả công việc bạn phải làm trước đây để đưa thông tin qua lại (nội dung trong mẫu với một đại biểu và một giao thức , tất cả hiện có thể bị xóa).


3

Chỉ cần thêm một chút tinh tế vào định nghĩa yêu cầu có thể hữu ích. Điều này dựa trên thử nghiệm trong Xcode 4.6. Tôi thấy rằng nó cụ thể và chỉ là khai báo (!) Của phương thức cho phép phản hồi điều khiển-kéo mong muốn từ Xcode. Đây là những gì tôi nhận thấy là các yêu cầu đầy đủ:

  • Được đánh dấu là IBAction
  • Nhận một tham số là UIStoryboardSegue*
  • Bạn phải có một hành động được khai báo (nhưng không nhất thiết phải được triển khai [nghĩa là một phương thức trong phần .Mtriển khai]).
  • Nó có thể nằm trong phần khai báo giao diện của bất kỳ lớp nào, thậm chí là phần giao diện của a .M, ngoại trừ lớp appdelegate. (Tôi không thấy bất kỳ sự phụ thuộc nào vào vị trí của nó trong hệ thống phân cấp bộ điều khiển. Bạn có thể thêm bất kỳ tệp cũ nào và hệ thống dường như tổng hợp tất cả các phương thức có UIStoryboardSeguetham số và hiển thị chúng trên menu của biểu tượng Thoát.) Lưu ý rằng điều khiển-kéo menu thậm chí sẽ hiển thị cho bạn phương thức của bạn nếu phương thức nằm trong lớp của cảnh bạn đang thao tác trong trình chỉnh sửa bảng phân cảnh, nhưng nó sẽ xuất hiện mà không có dấu hai chấm và dường như không kích hoạt bất kỳ hành động nào trong thời gian chạy.

Thí dụ: -(IBAction)anymethodname:(UIStoryboardSegue *)myvariable;

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.