Как передать данные в 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;
}
}
Спасибо за любую помощь.
Ответы
Ответ 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