在视图控制器之间传递对象

时间:2016-03-08 13:51:14

标签: ios swift

所以我试图从两个视图控制器之间的当前indexPath.row传递一些数据。两个视图控制器都有:

    var imageFile = [PFFile]()
    var imageText = [String]()
    var username = [String]()
    var createdAt = [NSDate]()
    var objID = [String]()
    var thumbEmoji = [NSArray]()
    var loveEmoji = [NSArray]()
    var laughEmoji = [NSArray]()
    var handsEmoji = [NSArray]()
    var pooEmoji = [NSArray]()
    var comments = [NSArray]()
    var tagString = ""

如何在override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)中传递此内容并获取当前indexPath.row

4 个答案:

答案 0 :(得分:1)

这将为您提供indexPath和目标控制器,以便您可以设置它的数据。 sender也是UITableViewCell个实例。这是默认实现,其中每个单元格触发ShowDetail segue。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "showDetail" {
        if let indexPath = self.tableView.indexPathForSelectedRow, let controller = segue.destinationViewController as? [your_destination_controller_type] {
            //Do you thing here
        }
    }
}

答案 1 :(得分:0)

只需将发件人作为indexPath传递,您必须将其转换回prepareForSegue方法

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
      [self performSegueWithIdentifier:@"identifire" sender:indexPath];
}

prepareForSegue方法中就像:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"identifire"]) {
        NSIndexPath *ip = (NSIndexPath *)sender;
        YourTargetView *gcVC = (YourTargetView *)[segue destinationViewController];
        gcVC.passdata = [YourArray objectAtIndex:ip.row];
    }
}

HTH !!

答案 2 :(得分:0)

让indexPath:NSIndexPath = self.tableView.indexPathForSelectedRow!

答案 3 :(得分:0)

我建议您将数据模型移到视图控制器之外。这样,你不必传递任何东西。当控制器想要更改数据时,它会告诉数据模型更新它。当控制器想要显示数据时,它会要求数据模型提供数据。

然后,一条数据模型信息变为“哪个是当前项目”。