如何将字幕从uitableview推送到详细视图控制器

时间:2014-03-13 23:59:45

标签: ios iphone objective-c uitableview

我有一个项目,基本上是一个uitableview,填充了一个可变数组,并有一个搜索栏

现在uitableview的标题和副标题都填充了不同的可变数组..

当您点击一个单元格(从视图或搜索视图)时,它会将标题推送到新的视图控制器。

我需要将字幕也推送到新的视图控制器

我尝试了所有我知道但我没有成功的事情

我已附加项目,因此您可以看到它的编码方式,并可能告诉我如何解决它

http://ezzati.net/KuwaitFood.zip

请帮助

3 个答案:

答案 0 :(得分:2)

请更换以下功能。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"ShowDetail"]) {
        NSString *object = nil;
        NSIndexPath *indexPath = nil;

        if (self.searchDisplayController.isActive) {
            indexPath = [[self.searchDisplayController searchResultsTableView] indexPathForSelectedRow];
            object = self.results[indexPath.row];
        } else {
            indexPath = [self.tableView indexPathForSelectedRow];
            object = self.objects[indexPath.row];
        }

        [[segue destinationViewController] setDetailLabelContents:object];
        [[segue destinationViewController] setNumberdetailLabelContents:[sender detailTextLabel].text];
    }
}

答案 1 :(得分:0)

您必须为segue指定一个标识符(从表视图控制器到故事板中的新控制器的箭头),然后使用此功能获取目标视图控制器并使用数据设置它的属性你想发送:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString:@"identifier"])
    {
        SecondViewController *vc = [segue destinationViewController];
        // get the selected item index
        NSInteger index = [self.tableView indexPathForCell:sender].row;
        // set the data property for the second view (pass data)
        vc.theProperty = [self.data objectAtIndex:index];
}

现在,您可以在theProperty上找到填充了表格视图控制器数据的SecondViewController

编辑:我已经审核了您的代码。为你的情况这样做:

-tableView: didSelectRowAtIndexPath:中将self更改为indexPath,如下所示:

[self performSegueWithIdentifier:@"ShowDetail" sender:indexPath];

并在prepareForSegue执行此操作:

DetailViewController *vc = [segue destinationViewController];

// get the selected item index
NSInteger index = ((NSIndexPath *)sender).row;

// index of searched object in self.objects
NSInteger trueIndex = [self.objects indexOfObject:[self.results objectAtIndex:index]];

// set the data property for the second view (pass data)
vc.detailLabelContents = [self.objects objectAtIndex:trueIndex];
vc.numberdetailLabelContents = [self.numbers objectAtIndex:trueIndex];

问题是因为您使用了self.results的索引并将其应用于self.objects为0,因此您总是得到第一个对象" You Tube"

答案 2 :(得分:0)

更改

的最后一行

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

如下

[[segue destinationViewController] setDetailLabelContents:[sender detailTextLabel].text];