2012-06-26 21 views
5

Vâng, với một số bạn câu hỏi này nghe có vẻ vô lý nhưng tôi đang thảo luận với các đồng đội của tôi về thiết kế của một ứng dụng ios và tôi cần ý kiến ​​của bạn về nó.Chúng ta có nên tránh vòng lặp segue giữa hai chế độ xem không?

Việc thiết kế cũ mà tôi không đồng ý là như sau

  • Chúng tôi có ViewControllerA trong đó có nút "Go To B". Nút có khoảng cách PUSH để đi đến B.
  • Chúng tôi có ViewControllerB chứa Nút "Đi tới A". Nút có khoảng cách PUSH để đi đến A.
  • Chúng tôi phải di chuyển giữa 2 ViewController a nhiều.

Như bạn có thể thấy, có một vòng lặp segue giữa ViewController A và B và tôi nghĩ chúng ta không bao giờ nên để nó xảy ra. Tôi thích đi từ B đến A bằng nút "Back" trong thanh điều hướng.

Làm thế nào nghiêm trọng là vòng lặp PUSH segue trong thiết kế? Có thể chấp nhận trong một số trường hợp không? Tôi có thể thấy được đề nghị thiết kế tốt bởi apple đâu (nếu có bất kỳ?)

EDIT: tôi cố gắng "pop trước khi đẩy" giải pháp bởi nfarshchi nhưng nó không work.This là cách tôi đã làm: 1) Tôi không thể tạo phân đoạn từ VC A sang VC B và phân đoạn từ VC B sang VC A cùng một lúc. Dường như bảng phân cảnh ngăn không cho nó xảy ra 2) Vì vậy, tôi tạo một segue có mã định danh là "gotoB" từ nút "Đi tới B" trong VC A đến VC B và một phân đoạn có mã định danh là "gotoA" từ nút "Chuyển đến A "trong VC B để VC A.

Vì vậy, các Storyboard sẽ trông như thế này:

VC X --- Đẩy ---> VC Một < ---- Đẩy ----> VC B (lý do tôi cần ViewController X được giải thích sau) 3) Trong VC AI có điều này:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSLog(@"Prepage for segue go to B") ; 
    if ([[segue identifier] isEqualToString:@"gotoB"]) { 
     [self.navigationController popViewControllerAnimated:NO]; 

    } 
} 

tôi cần VC X bởi vì tôi không thể pop một ViewController từ Stack nếu chỉ có một ViewController trong đó.

Bây giờ có vẻ như đúng, nhưng khi tôi nhấp "Đi tới B", thay vào đó, nó đã chuyển sang VC X. Rõ ràng là popViewControllerAnimated trên đã xuất hiện VC A, và đó là tất cả, segue cho VC B không còn bị bắn nữa. Kết quả là VC B không bị đẩy vào Stack như mong đợi.

Vì vậy, tôi nghĩ rằng đó là không khả thi để thực hiện giải pháp nfarshchi của

Trả lời

3

Bạn có thể làm điều đó nhưng xem xét khi bạn đẩy ra một UIViewController và một lần nữa đẩy nó trong bạn sẽ gọi rất nhiều phương pháp để tái thiết kế nó. nếu bạn muốn di chuyển qua chúng rất nhiều thì tốt hơn là sử dụng UINavigationController. trong trường hợp này bạn chỉ làm cho họ một lần và bạn có thể điều hướng giữa chúng một cách dễ dàng. điều này sẽ sử dụng ít tài nguyên hệ thống hơn

+0

Cảm ơn. Nhưng tôi không nghĩ rằng giải pháp của bạn về "pop trước khi đẩy" sẽ làm việc – grandagile

+1

Không có người đàn ông, tôi không có nghĩa là bạn bật trước khi bạn đẩy, tôi đã nói bằng cách sử dụng 'UINavigationController' bạn chỉ đẩy' UIViewController' một lần và bạn cũng có thể có một nút quay lại đơn giản. và không cần phải bật lại nữa. 'UINavigationController' sẽ làm điều đó cho bạn. – nfarshchi

+0

Hãy xem xét bạn có 'ViewControllerA' và' ViewControllerB'. trên 'A' bạn có thể có một Button và [self.navigationController pushViewController: viewControllerB hoạt hình: YES]; – nfarshchi

1

Chuyển đổi đẩy/pop chỉ nên được sử dụng nếu không gian 2D ảo mà quá trình chuyển đổi tạo là thực tế. Nếu người dùng thấy 10 chuyển tiếp liên tiếp, nó sẽ cảm thấy như họ đang đi sâu hơn và sâu hơn vào một hệ thống phân cấp và nó có thể dẫn đến sự nhầm lẫn và một mô hình tâm thần xấu, đặc biệt là trong thực tế bạn đang di chuyển giữa hai bộ điều khiển xem.

Sử dụng nút quay lại sẽ là giải pháp tốt hơn hoặc bạn có thể thực hiện chuyển đổi tùy chỉnh của riêng mình, điều này giúp người dùng rõ ràng hơn về những gì đang diễn ra. Có lẽ một quá trình chuyển đổi flipside cũng sẽ thích hợp.

Các vấn đề liên quan