2013-09-22 28 views
42

Tôi chỉ cần biết cách làm cho một số chuyển hướng/điều kiện 'có điều kiện' sang một số chế độ xem. Ví dụ:Phân đoạn có điều kiện Sử dụng Storyboard

Nếu người dùng chưa đăng nhập, thì chế độ xem có biểu mẫu đăng nhập xuất hiện. Nhưng nếu người dùng đăng nhập, họ sẽ thấy chế độ xem hồ sơ của họ.

Cách tạo phân đoạn có điều kiện giống như cách sử dụng bảng phân cảnh?

Cảm ơn bạn

Trả lời

68

Đối với phân đoạn có điều kiện, không bắt đầu phân đoạn từ nút như bình thường. Thay vì sử dụng các bước sau:

  1. Trong storyboad của bạn, bắt đầu một segue trực tiếp từ bộ điều khiển xem nguồn để điều khiển xem đích. Để thực hiện việc này, bạn có thể kéo biểu tượng của trình điều khiển chế độ xem nguồn trên thanh ngay bên dưới chế độ xem tới trình điều khiển chế độ xem đích trên vùng canvas chính. Chỉ cần nhớ bạn phải kết nối hai bộ điều khiển xem trực tiếp và không phải với bất kỳ điều khiển nào.

  2. Nhập mã định danh phân biệt phù hợp cho phân đoạn này. Ví dụ nói "conditionSegue"

  3. Bây giờ, trong file .m xem điều khiển nguồn của bạn hoạt động tình trạng của bạn và gọi -performSegueWithIdentifier:sender: phương pháp trên "bản ngã" như thế này:

    -(void)loadDestinationVC{ 
        if(condition == YES){ 
    
         [self performSegueWithIdentifier:@"conditionSegue" sender:nil]; 
        } 
    } 
    

Tôi hy vọng tôi đã làm cho nó thông thoáng.

+0

Nó làm việc ngươi đối với tôi, tôi đã làm một segue conditionall từ một UITableViewCell, bởi vì một số tế bào có hiển thị một số quan điểm và các tế bào khác khác ... Vấn đề là rằng khi tôi trở lại từ segue đẩy nó đã bị mất tập trung và thiết lập lại xem, nó sẽ không trở lại tế bào mà bắt đầu hành động. Tôi có một tableview với một điều khiển phân đoạn trên đầu trang mà thay đổi giữa 2 datasources. Nếu tôi segue từ một uitableviewcell với chỉ số thứ hai của kiểm soát phân đoạn được lựa chọn, khi tôi trở lại từ segue, nó bắt đầu xem với chỉ số 1rst tại kiểm soát phân đoạn ... – fguespe

+0

@fguespe Bạn có yêu cầu một giải pháp cho vấn đề hoặc là một bình luận chung. –

+0

có, tôi cần một giải pháp, nhưng tôi nâng cao một chút và tôi hiểu không phải là lỗi của segue có điều kiện. cho các phân đoạn bình thường xảy ra. Vấn đề là điều khiển phân đoạn tìm kiếm chỉ mục khi nó trở lại nhưng nó cho thấy dữ liệu phân đoạn đầu tiên. – fguespe

3

Bạn tạo các phân đoạn trực tiếp từ bộ điều khiển này sang bộ điều khiển khác (hoặc bộ lọc khác) và cung cấp cho chúng số nhận dạng. Trong mã bạn gọi chọn giữa các khoảng cách tùy thuộc vào điều kiện của bạn và gọi performSegueWithIdentifier: sender :.

14

Tôi tin rằng một cách tiếp cận tốt hơn nếu bạn muốn sử dụng segues từ nút sẽ được sử dụng này:

Đầu tiên tạo ra một nút và sử dụng một segue để kết nối nó với cái nhìn khác, cung cấp cho này Segue một tên

sau đó sử dụng phương pháp này trong file .m bạn

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    if ([identifier isEqualToString:@"SegueName"]) { 
     //Check if should make the segue 
     //if not do something 
     [self doSomething]; 
     //and return NO; 
     return NO; 
    } 
    return YES; 
    } 
+0

Nếu bạn đang sử dụng xcode 6 và không chắc chắn về loại sague nào sẽ sử dụng, bạn có thể sử dụng "Show" sague dưới "Action Sague". Ngoài ra, để cung cấp cho một định danh (tên) cho sague, hãy chọn nó trong bảng phân cảnh và nhập tên của sự lựa chọn vào trường "Định danh" trong thanh tra "Thuộc tính" (ở phía bên phải) –

1

Tạo "chung chung" segue bởi ctrl kéo từ biểu tượng xem điều khiển ở dưới cùng đến đích. Khoảng cách này sẽ không được liên kết với bất kỳ hành động nào. Sau đó, trong mã của bạn có bao giờ sự kiện này được sử dụng mã điều kiện của bạn mà bạn muốn kích hoạt các segue, hãy gọi:

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender 
6

Trong Swift bạn có thể làm: như @Gaurav Singh gợi ý trong câu trả lời của ông

Bước 1: Chèn một segue từ ViewControllerA vào ViewControllerB. Các segue nên bắt đầu từ ViewControllerA chính nó và không phải từ bất kỳ điều khiển (như Button) trong đó.

Bước 2: Cho segue một số nhận dạng duy nhất trong bảng phân cảnh. Ví dụ: seageFromAtoB

Bước 3: Trong ViewControllerforA của bạn.nhanh chóng ghi:

if(condition == true) { 
    self.performSegueWithIdentifier("seageFromAtoB", sender: self) 
} 

Nếu bạn đang thực hiện một số nhiệm vụ trong một số khác Thread sau đó sử dụng performSegueWithIdentifier có thể ném một ngoại lệ.

Nếu bạn nhận được lỗi này thì bạn nên sử dụng:

if(condition==true){ 
     NSOperationQueue.mainQueue().addOperationWithBlock { 
      self.performSegueWithIdentifier("seageFromAtoB", sender: self) 
     } 
} 

này sẽ thực hiện chuyển hướng segue trong chính Thread.

Hope trợ giúp này cho ai đó tìm kiếm Swift lựa chọn

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