我有一个表视图控制器和另一个视图控制器。我想将数据从选定的单元格(从表格视图)传递到视图控制器并更新视图控制器中的标签。我是按照以下方式做到的:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"SubRecipeConnectorSegue"])
{
RecipeDetailViewController *destViewController = segue.destinationViewController;
destViewController.recipeName = selectedRecipe;
}
}
问题是,当我第一次选择一个单元格时,它没有出现在标签中;但是,当我选择任何第二个值时;我的第一个选定值显示在标签中。 同样,当选择第3个值时,标签中会显示第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;
}
}
我不知道你是如何在单元格中存储数据的,所以这可能与我写的例子有所不同。如果您需要帮助,请告诉我。