Подтвердить что ты не робот

Как передать данные в sque ios5 раскадровки uitableview для подробного просмотра

Я создаю приложение в ios5 с помощью раскадровки. У меня есть контроллер tableview, встроенный в контроллер навигации, и когда вы нажимаете на ячейки в 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;    
    }
}

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

У меня была та же проблема. Последующие части учебника Ray Wenderlich и обнаружили, что вам нужно выбрать ячейку таблицы и 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;
        }   
}

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

Попробуйте этот путь

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

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