1

我有一个表视图控制器和另一个视图控制器。我想将数据从选定的单元格(从表视图)传递到视图控制器并更新视图控制器中的标签。我正在通过以下方式执行此操作:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"SubRecipeConnectorSegue"])
{
     RecipeDetailViewController *destViewController = segue.destinationViewController;
     destViewController.recipeName = selectedRecipe;

 }
}

问题是,当我第一次选择一个未出现在标签中的单元格时;但是,当我选择任何第二个值时;我的第一个选择值显示在标签中。同样,选择第三值时,标签中显示了第二个值。谁能告诉我出了什么问题?请帮忙。

4

2 回答 2

0

这样做的方法是手动触发 segue。在 IB 中,将 segue 从一个 VC 绘制到另一个(而不是从表格单元格)。确保给它一个标识符。在 tableView:didSelect 中,设置选中的字符串并调用 performSegueWithIdentifier:。

您看到的问题是 segue prep 在 tableView 委托之前被调用,因此新的 VC 呈现先前的选择,这是第一次未定义的。

于 2012-12-06T14:34:12.103 回答
0

您应该从 didSelectRowAtIndexPath 中的相应单元格获取数据,然后以语法方式执行 segue。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *recipeString = [dataArray objectAtIndex:indexPath.row];
    [self performSegueWithIdentifier:@"SubRecipeConnectorSegue" sender:recipeString];
}

然后将您的 prepareForSegue 方法更改为

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(NSString*)recipeString
{
    if ([segue.identifier isEqualToString:@"SubRecipeConnectorSegue"])
    {
        RecipeDetailViewController *destViewController = segue.destinationViewController;
        destViewController.recipeName = recipeString;

    }
}

我不知道您如何将数据存储在单元格中,因此这可能与我编写的示例不同。如果您需要帮助实施,请告诉我。

于 2012-12-06T16:58:01.640 回答