无法segue选择UITableViewCells信息Swift

时间:2016-07-08 15:14:14

标签: ios swift email swift2 segue

我正在创建一个应用程序,允许用户点击单元格,为它们添加.Checkmark附件。在他们选择了他们想要的单元格后,他们就完成了它,然后让他们通过电子邮件向他们选择列表中所选项目的人发送电子邮件。我无法弄清楚的是,如何区分信息,说明需要在电子邮件中列出哪些项目。

这是我的话:

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if (segue.identifier == "emailSegue") {
        let seg = segue.destinationViewController as! emailViewController;

        seg.toPass = ??
    }

这是.Checkmark VC: .Checkmark VC 需要发送哪些单元格为此VC启用.Checkmark附件: enter image description here

根据Nirav的要求,这里是cellForRowAtIndexPath和didSelectRowAtIndexPath函数:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {
        let cell: InstrumentTableCell! = tableView.dequeueReusableCellWithIdentifier(identifier) as? InstrumentTableCell

       checked = Array(count:recipies.count, repeatedValue:false)
        cell.configurateTheCell(recipies[indexPath.row])

        if !checked[indexPath.row] {
            cell.accessoryType = .None
        } else if checked[indexPath.row] {
            cell.accessoryType = .Checkmark
        }

        return cell
    }
 override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
    {
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
        if let cell = tableView.cellForRowAtIndexPath(indexPath) {
            if cell.accessoryType == .Checkmark {
                cell.accessoryType = .None
                checked[indexPath.row] = false
            } else {
                cell.accessoryType = .Checkmark
                checked[indexPath.row] = true
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

试试这个:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

let cell = tableView.cellForRowAtIndexPath(tableView.indexPathForSelectedRow!)

if (segue.identifier == "emailSegue") {
    let seg = segue.destinationViewController as! emailViewController;

    seg.toPass = cell.infoToPass
}

答案 1 :(得分:-1)

这取决于您用于选择单元格的方法。如果选中标记表示单元格选择状态,则可以将选定单元格设为tableView.indexPathsForSelectedRows。但请注意,每次调用[tableView reloadData]时indexPathsForSelectedRows都会重置。 另一种方法是,您可以将选定对象的信息保存在单独的数组中,并在prepareForSegue函数中使用它。在这种情况下,您可以为tableView:didSelectRowAtIndexPath function

使用以下代码
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSObject *dataObject = self.dataArray[indexPath.row];
    if ([self.selectedObjects containsObject:dataObject]) {
        [self.selectedObjects removeObject:dataObject];
        cell.accessoryType = UITableViewCellAccessoryNone;
    }
    else {
        [self.selectedObjects addObject:selectedObjects];
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
}

然后传递seg.toPass = self.selectedObjects;