2011-10-29 39 views
25

Tôi đang tạo ứng dụng trong ios5 bằng bảng phân cảnh. Tôi có một tableviewcontroller nhúng trong một bộ điều khiển chuyển hướng và khi bạn bấm vào các tế bào trong tableviewcontroller một số chi tiết về chủ đề ô đó nên được thông qua để xem chi tiết. Tôi sử dụng một plist để cư tableview và xem chi tiết. Tôi đã làm điều này tốt mà không cần sử dụng bảng phân cảnh nhưng muốn tìm hiểu cách sử dụng bảng phân cảnh. Tôi đã seque đi xem chi tiết của tôi từ tableviewcontroller.Cách truyền dữ liệu trong bảng điều khiển seos ios5 uitableview để xem chi tiết

Mã của tôi cho seque là:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"DetailViewControllerSeque"]) 
    { DetailViewController *detailViewController = [segue destinationViewController]; 
     NSString *path = [[NSBundle mainBundle] bundlePath]; 
     NSString *finalPath = [path stringByAppendingPathComponent:@"questList.plist"]; 
     NSArray *tempArray = [finalPath valueForKey:@"description"]; 
     NSString *descriptionString = [tempArray valueForKey:@"description"]; 
     detailViewController.detailDescriptionText.text = descriptionString;  
    } 
} 

Cảm ơn sự giúp đỡ nào.

+4

câu hỏi của bạn là gì? –

Trả lời

0

Tôi gặp vấn đề tương tự và chưa giải quyết được bằng bảng phân cảnh. Tuy nhiên, tôi nghĩ rằng segue nên bắt đầu tại các tế bào, không phải toàn bộ tableviewcontroller. nếu bạn sử dụng các ô mẫu thử nghiệm, điều này có thể hoạt động - nhưng tôi không biết về các loại ô được tạo mã. cũng sẽ đánh giá cao sự giúp đỡ về chủ đề này.

Chỉnh sửa: Hướng dẫn tại http://kurrytran.blogspot.com/2011/10/ios-5-storyboard-and.html cho thấy rằng không có giải pháp segue nào tồn tại và bạn vẫn phải thực hiện chuyển đổi sang chế độ xem chi tiết trong mã. Tôi không biết điều này đúng như thế nào, nhưng tôi sẽ chỉ làm theo cách đó cho đến khi ai đó cho tôi thấy giải pháp phân vùng/phân biệt thuần túy;).

12

Tôi gặp vấn đề tương tự, Đã theo dõi các phần của hướng dẫn Ray Wenderlich và thấy rằng bạn cần phải chọn ô bảng và Ctrl-Kéo để xem bộ điều khiển của bạn. Sau đó, gọi performSegueWithIdentifier trong didSelectRowAtINdexPath.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"mySegueId" sender:self]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
     NSLog(@"prepareForSegue: %@", segue.identifier );  
     if ([segue.identifier isEqualToString:@"mySegueId"]) 
     { 
      DetailController *detailController = segue.destinationViewController; 
      detailController.delegate = (id)self; 
      detailController.selected = selectedRow; 
     } 
} 
+0

cảm ơn, đây chính là điều tôi muốn! Có một lỗi ở đây detailControllerController, sẽ không cho phép tôi chỉnh sửa hoặc tôi tự sửa chữa nó. –

+0

Cảm ơn bạn. – SampathKumar

+0

cả hai câu trả lời đã giúp tôi, nhưng tôi đã rất ngạc nhiên rằng tôi cũng cần điều này. Tôi nghĩ rằng Apple sẽ thực hiện như vậy mà nó sẽ là đủ để kết nối các tế bào với cảnh tiếp theo mà không cần phải cho biết segue để thực hiện .... anyway, nó hoạt động. – Heckscheibe

67

Tôi gặp sự cố tương tự (do thiếu kinh nghiệm với iOS5).

Hóa ra đó là một ứng dụng mẫu với SDK iOS5 có chế độ xem bảng sử dụng phân đoạn khi một ô bảng được khai thác: "Simple Drill Down".

https://web.archive.org/web/20130513140140/http://developer.apple.com:80/library/ios/#samplecode/SimpleDrillDown/Introduction/Intro.html

Bạn thiết lập các segue vào ô trong bảng và cung cấp cho nó một cái tên trong file kịch bản này.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    /* 
    When a row is selected, the segue creates the detail view controller as the destination. 
    Set the detail view controller's detail item to the item associated with the selected row. 
    */ 
    if ([[segue identifier] isEqualToString:@"ShowSelectedPlay"]) { 

     NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow]; 
     DetailViewController *detailViewController = [segue destinationViewController]; 
     detailViewController.play = [dataController objectInListAtIndex:selectedRowIndex.row]; 
    } 
} 
+0

cảm ơn bạn vì câu trả lời tuyệt vời này! (+1) – filou

+0

Cảm ơn bạn nhiều lần.Bị mắc kẹt với điều này trong vài giờ. Cảm ơn! – Patrick

+3

Câu trả lời này cần được chấp nhận là chính xác. – dbarros

1

Đừng cần Gọi: [self performSegueWithIdentifier:@"mySegueId" sender:self];

bạn có thể sử dụng NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow]; để có được thông tin của bạn được lựa chọn, chức năng - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{...} của bạn.

0

Hãy thử cách này

Tên segue của bạn (từ tế bào tableview để xem chi tiết) .Sau đó

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 


    if([segue.identifier isEqualToString:@"yourSegueName"]){ 

     DetailViewController * detailViewController =segue.destinationViewController; 
     detailViewController =[self.yourTableViewDataArray objectAtIndex:[self.yourTableView indexPathForSelectedRow].row]; 

    } 

} 

Đừng quên nhập của bạn SecondViewController/DetailViewController

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