使用segue发出传递字符串

时间:2012-12-06 14:25:03

标签: iphone objective-c ios cocoa uistoryboardsegue

我有一个表视图控制器和另一个视图控制器。我想将数据从选定的单元格(从表格视图)传递到视图控制器并更新视图控制器中的标签。我是按照以下方式做到的:

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

 }
}

问题是,当我第一次选择一个单元格时,它没有出现在标签中;但是,当我选择任何第二个值时;我的第一个选定值显示在标签中。 同样,当选择第3个值时,标签中会显示第2个值。 任何人都可以告诉我出了什么问题?请帮忙。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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;

    }
}

我不知道你是如何在单元格中存储数据的,所以这可能与我写的例子有所不同。如果您需要帮助,请告诉我。