Как использовать раскадровку?

#iphone #objective-c #cocoa-touch #ios5 #storyboard

#iPhone #objective-c #cocoa-touch #ios5 #Раскадровка

Вопрос:

Я пытаюсь использовать storyboards segue вместо didSelectRowAtIndex.

Это то, что у меня есть, но этот метод не распознает indexPath.row . Есть ли альтернатива, которую я могу использовать, чтобы сделать то же самое?

 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{
    SpecificExerciseTableViewController *upcomingViewController = segue.destinationViewController;
    if ([segue.identifier isEqualToString:@"Web"]) 
    {
        upcomingViewController.exerciseArray = [[self.muscleArray objectAtIndex:indexPath.row]objectForKey:@"exercises"];
        upcomingViewController.muscleName = [[self.muscleArray objectAtIndex:indexPath.row]objectForKey:@"muscleName"];
    }
}
 

Ответ №1:

Если у вас нет этого indexPath в качестве ivar , такая переменная не существует в области видимости.

Если вы хотите получить indexPath для выбранной строки в UITableView, используйте:

 - (NSIndexPath *)indexPathForSelectedRow
 

Скорректированный код для приведенного выше:

 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

    SpecificExerciseTableViewController *upcomingViewController = segue.destinationViewController;
    if ([segue.identifier isEqualToString:@"Web"]) 
    {
        upcomingViewController.exerciseArray = [[self.muscleArray objectAtIndex:indexPath.row]objectForKey:@"exercises"];
        upcomingViewController.muscleName = [[self.muscleArray objectAtIndex:indexPath.row]objectForKey:@"muscleName"];
    }
}
 

Комментарии:

1. Я пытался это сделать NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; , но он выдает мне нуль, когда я его регистрирую.

2. Он должен возвращать nil, если нет выбранной строки, если он все еще возвращает nil. Тогда, возможно, свойство TableView равно нулю. Трудно сказать без дополнительной информации.

3. Большое спасибо — получение NSIndexPath было тем, что мне было нужно. Все отсортировано.

Ответ №2:

Этот трюк отлично работает, вот пример того, как я использовал его для извлечения проанализированных элементов в веб-представление

Файл .h

 @property (strong, nonatomic) NSString *url;
@property (strong, nonatomic) UIWebView *webView;
 

.m файл

 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    if ([segue.identifier isEqualToString:@"WebViewSegue"]) {

        WebViewController *webViewController = segue.destinationViewController;
        webViewController.url = (self.parseResults)[indexPath.row][@"link"];
        webViewController.title = (self.parseResults)[indexPath.row][@"title"];

    }
}