如何使segue调用另一种方法

时间:2016-03-27 14:22:56

标签: ios objective-c

我有一个带有CutomCells的TableViewCell,其中包括图像视图,当用户选择某行时,此行中的图像应显示在另一个viewController中。 这些控制器之间的连接是通过segue完成的,我尝试设置图像。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"ImageVC"])
    {
        ImageViewController * ivc = segue.destinationViewController;
        ivc.myTemporaryImage = [self.dataDictionary objectForKey:self.names[self.selectedCell]];
    }
}

定义选择了哪一行我使用TableViewDelegates方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   self.selectedCell = indexPath.row;
    [self.dataDictionary objectForKey:self.names[indexPath.row]];
}

这里没有反映图像的问题,首先导致fires方法:prepareForSegue,并且只在那之后 - didSelectRowAtIndexPath。但我需要改变这个顺序。你能建议怎么做吗?

此外,我尝试以编程方式创建ImageViewController,而不使用segue,直接在方法didSelectRowAtIndexPath中,但在此图中未显示此图像。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   [self.dataDictionary objectForKey:self.names[indexPath.row]];

    ImageViewController * ivc = [[ImageViewController alloc]init];
    ivc.myTemporaryImage = [self.savedImages objectForKey:self.names[indexPath.row]];

    [self.navigationController pushViewController:ivc animated:YES];
}

请问您如何管理此问题?

2 个答案:

答案 0 :(得分:1)

我认为你可以在willSelectRowAtIndexPath方法中保存indexPath。

答案 1 :(得分:1)

您必须在单元格中删除对segue的直接引用,然后在tableView委托中以编程方式调用它:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   self.selectedCell = indexPath.row;
   [self performSegueWithIdentifier:@"ImageVC", sender: [self.savedImages objectForKey:self.names[indexPath.row]]]
}

然后在prepareForSegue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"ImageVC"])
    {
        ImageViewController * ivc = segue.destinationViewController;
        ivc.myTemporaryImage = sender;
    }
}