2012-03-07 22 views
7

Tôi có một ứng dụng iPhone tôi hiện đang xây dựng trong XCode 4.3 với Storyboard. Tôi có một bộ điều khiển xem "gốc" với hai (2) phần tiếp theo cho một bộ điều khiển xem có chứa một UIWebView. Tôi muốn để có thể xác định segue (đã thiết lập định danh duy nhất cho cả hai segues) vì vậy tôi có thể "đẩy" nội dung chính xác vào UIWebView, dựa trên đó segue được kích hoạt trong bộ điều khiển xem "gốc".Làm thế nào để xử lý hai segues đi đến cùng một bộ điều khiển xem?

Tôi nghĩ tôi phải sử dụng phương pháp "prepareForSegue", nhưng không biết nó sẽ đi đâu. Tôi có thể tìm hiểu làm thế nào để đối phó với hai segues đi đến cùng một bộ điều khiển xem? (Tôi đã google'd nó và thấy không có gì thích hợp với tình hình của tôi).

Đây là mã mà tôi đang sử dụng:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"helpSegue"]) { 
     NSLog(@"helpSegue"); 
    } 
    else if ([segue.identifier isEqualToString:@"reportSegue"]) { 
     NSLog(@"reportSegue"); 
    } 
} 

Trả lời

3

Bạn sẽ không gọi -prepareForSegue:sender:, bạn sẽ thực hiện nó trong điều khiển điểm của bạn. Trong nó ghi đè của phương pháp đó, bạn có thể kiểm tra identifier tài sản của segue (các segue được thông qua tại như một tham số):

if ([segue.identifier isEqualToString:@"Segue Numero Uno"]) { 
    // do something here 
} 

Đó phép bạn chụp một số loại hành động tùy thuộc vào segue đang gây ra quá trình chuyển đổi. Bạn có thể đặt số nhận dạng cho từng phân đoạn trong trình chỉnh sửa bảng phân cảnh.

Cập nhật: Dựa trên mã bạn đã cung cấp trong nhận xét (mà tôi đã thêm vào câu hỏi của bạn), bạn đã có ý tưởng đúng ngay bây giờ. Tại thời điểm này, nó chỉ là vấn đề gỡ lỗi thời trang cũ tốt. Một số điều cần kiểm tra:

  • là bộ điều khiển xem trong kịch bản của bạn (ví dụ: một trong đó các segues trong câu hỏi dẫn đến) thiết lập là một thể hiện của lớp mà thực hiện -prepareForSegue:sender: này? Kiểm tra loại bộ điều khiển trong bảng phân cảnh.

  • Làm các chuỗi bạn sử dụng trong mã của mình chính xác khớp với số nhận dạng bạn đã đặt cho phân đoạn trong bảng phân cảnh? Viết hoa, đánh vần, dấu câu và không gian trắng đều được tính.

  • Phương thức -prepareForSegue:sender: của bạn có được gọi không? Đặt điểm ngắt và gỡ lỗi. Nếu nó đang được gọi, số nhận dạng cho số segue được chuyển vào là gì? Nếu nó không được gọi, bộ điều khiển xem trong bảng phân cảnh không có lớp phù hợp.

+0

Cảm ơn bạn, cảm ơn bạn, cảm ơn bạn! Đó chính xác là những gì tôi cần ... – SpokaneDude

+0

Rất tiếc ... xin lỗi, nhưng không có phương thức "seque.identifier.isEqualToString ... tôi đặt - (void) [PrepareForSegue trong ViewController.m, là bộ điều khiển duy nhất trong dự án Tôi có làm gì sai không? – SpokaneDude

+0

'-isEqualToString:' là một phương thức (không phải là thuộc tính) của NSString. Thuộc tính 'identifier' của UIStoryboardSegue là một NSString *. Vì vậy, bạn sử dụng nó như tôi đã thấy trong đoạn mã trên, tức là 'BOOL isEqual = [segue.identifier isEqualToString: @" foo "];'. Đúng là bạn có thể sử dụng cú pháp dấu chấm để gọi bất kỳ phương thức nào không tham số (mặc dù bạn thực sự chỉ nên sử dụng nó cho các thuộc tính), nhưng '-isEqualToString:' * does * lấy một tham số, vì vậy cú pháp chấm là hoàn toàn ra ngoài. – Caleb

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