将单元格数据(即cell.textlabel.text和cell.imageView.image)传递给另一个视图控制器

时间:2014-05-06 16:24:26

标签: ios objective-c uitableview

我有一个用数据填充的UITableView(文本和图像)。当用户点击特定的行项时,它将转到detailViewController,它将所选行项的文本和图像填充到下一个视图控制器中。

我正在使用prepareForSegue而不是didSelectRowAtIndexPath。

titleForRow:indexPath.row in:indexPath.section和imageForRow:...方法是为每个行项填充标题(cell.textLabel.text)和image(cell.imageView.image)。我没有使用数据模型,因为这只是在detailViewController(UNFDetailLoginTableViewController)上显示的模板

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

if ([segue.identifier isEqualToString:@"addLoginToDetailLoginTVC"])
{
    UINavigationController *navController = (UINavigationController *)segue.destinationViewController;

    UNFDetailLoginTableViewController *targetVC = (UNFDetailLoginTableViewController *)navController.topViewController;

    NSIndexPath *indexPath = [self.addLoginTableView indexPathForCell:sender];


    targetVC.loginNameTextField.text = [self titleForRow:indexPath.row in:indexPath.section];
    targetVC.detailLoginImage.image = [self imageForRow:indexPath.row in:indexPath.section];

    NSLog (@"%@", [self titleForRow:indexPath.row in:indexPath.section]);
  }  

}

点击特定行后,它会切换到detailLoginTableViewController,但数据不会填充。但是,NSLog会记录应该传递给detailLoginTableViewController的正确数据。请帮忙。谢谢你。

1 个答案:

答案 0 :(得分:1)

如果目标viewController的属性是IBOutlets,那么因为在加载destionation视图之前没有设置它们,你需要将数据传递给intermediate属性,然后传递给{{1}的viewDidLoad方法设置你的网点。

targetVC

在你的UNFDetailLoginTableViewController.h中:

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

if ([segue.identifier isEqualToString:@"addLoginToDetailLoginTVC"])
{
    UINavigationController *navController = (UINavigationController *)segue.destinationViewController;

    UNFDetailLoginTableViewController *targetVC = (UNFDetailLoginTableViewController *)navController.topViewController;

    NSIndexPath *indexPath = [self.addLoginTableView indexPathForCell:sender];


    targetVC.text = [self titleForRow:indexPath.row in:indexPath.section];
    targetVC.image = [self imageForRow:indexPath.row in:indexPath.section];

    NSLog (@"%@", [self titleForRow:indexPath.row in:indexPath.section]);
} 

在你的UNFDetailLoginTableViewController.m中,在viewDidLoad中:

@property (strong, nonatomic) NSString *text;
@property (strong, nonatomic) UIImage *image;