Как передать данные в последовательном раскадровке ios5 uitableview для детального просмотра - PullRequest
25 голосов
/ 29 октября 2011

Я создаю приложение в ios5, используя раскадровки. У меня есть tableviewcontroller, встроенный в контроллер навигации, и когда вы нажимаете на ячейки в tableviewcontroller, некоторая информация об этой теме ячейки должна быть передана в подробный вид. Я использую plist для заполнения таблицы и подробного представления. Я сделал это прекрасно, не используя раскадровку, но хочу научиться использовать раскадровку. Я перешел к моему подробному виду из контроллера tableview.

Мой код для следствия:

- (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;    
    }
}

Спасибо за любую помощь.

Ответы [ 5 ]

67 голосов
/ 28 декабря 2011

У меня была такая же проблема (из-за отсутствия опыта работы с iOS5).

Оказывается, что это пример приложения с iOS5 SDK, в котором есть табличное представление, которое использует сегменты при нажатии на ячейку таблицы: "Простое развертывание".

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

Вы устанавливаете переход в ячейке таблицы и даете ему имя в файле раскадровки.

- (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];
    }
}
12 голосов
/ 20 ноября 2011

Я получил ту же проблему, следуя частям учебника Рэя Вендерлиха, и обнаружил, что вам нужно выбрать ячейку таблицы и Ctrl-Drag в вашем контроллере просмотра.Затем позвоните performSegueWithIdentifier в 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;
        }   
}
1 голос
/ 15 февраля 2012

Не нужно звонить: [self performSegueWithIdentifier:@"mySegueId" sender:self];

Вы можете использовать NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow]; для получения выбранной вами информации в функции - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{...}.

0 голосов
/ 21 июля 2014

Попробуйте следующим образом

Имя Ваша последовательность (от ячейки табличного представления до подробного представления). Затем

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


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

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

    }

}

Не забудьте импортировать свой SecondViewController / DetailViewController

0 голосов
/ 12 ноября 2011

У меня та же проблема, и я еще не решил ее с раскадровками.Тем не менее, я думаю, что переход должен начинаться с ячейки, а не со всего контроллера таблиц.если вы используете прототип ячейки, это может сработать - но я не знаю, какие типы ячеек созданы кодом.Буду признателен за любую помощь по этой теме.

Редактировать: Учебное пособие по http://kurrytran.blogspot.com/2011/10/ios-5-storyboard-and.html предполагает, что никакого решения segue не существует, и вам все равно придется перейти к подробному представлению в коде.Я не знаю, насколько это правильно, но я буду делать это так, пока кто-нибудь не покажет мне чистое решение для раскадровки / передачи;).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...