表格细胞很大

时间:2017-01-02 03:37:10

标签: ios swift uitableview

我会尽可能清楚地说明这一点。在我的Xcode项目中,我正在重用原型单元格,我希望每个单元格打开一个不同的视图控制器。你们怎么会认为我能做到这一点?

感谢阅读!

更新

感谢阅读,希望你能给我一个解决方案!

4 个答案:

答案 0 :(得分:1)

我认为你应该实现tableview的委托方法

e.g。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
    if indexPath.row == 0
    {
            // open VC1
    }
    else if indexPath.row == 1
    {
        // open VC2
    }
    else if indexPath.row == 2
    {
        // open VC3
    }
}

答案 1 :(得分:1)

我认为这样的事情

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  switch indexPath.row {
    case 0:
      // segue to view 1
    case 1:
      // segue to view 2
    case 2:
      // segue to view 3
    case 3:
      // segue to view 4
    default:
      // default go here
  }
}

答案 2 :(得分:0)

您必须实施tableView(_:, didSelectRowAt:)

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if indexPath.row == 0 {
        let newViewController1 = ...
        present(newViewController1, animated: true, completion: nil)

    } else if indexPath.row == 1 {
        let newViewController2 = ...
        present(newViewController2, animated: true, completion: nil)

    } else {
        let newViewController3 = ...
        present(newViewController3, animated: true, completion: nil)
    }
}

或者,您可以向表格视图单元格添加手势识别器并实现自定义单元格委托。在你的情况下似乎没有必要,所以我不会推荐它。看起来它可能有点矫枉过正。如果你有兴趣,那么:

class NewsTableViewCell: UITableViewCell {
    var delegate: NewsTableViewCellDelegate?

    override func awakeFromNib() {
        let recognizer = UIGestureRecognizer(target: self, action: #selector(tapped))
        contentView.addGestureRecognizer(recognizer)
    }

    func tapped() {
        delegate?.cellTapped(self)
    }
}

protocol NewsTableViewCellDelegate {
    func cellTapped(_ cell: NewsTableViewCell)
}

extension MyViewController: NewsTableViewCellDelegate {
    func cellTapped(_ cell: NewsTableViewCell) {
        if cell == cell1 { }
        else if cell == cell2 { }
        else if cell == cell3 { }

        //You would have to manually determine how to check if a cell is cell1, cell2, or cell3, since you wouldn't have an indexPath available.
    }
}

答案 3 :(得分:0)

对于错误,

  1. main.storyboard移除segue,因为您使用的是来自storyboard的segue,但在代码工作中,您展示的是ViewConroller

  2. 在代码工作中,请通过以下

  3. 替换您的行

    **

    `let storyboard = UIStoryboard(name: "main.Storyboard", bundle: nil)
    let controller = storyboard.instantiateViewController(withIdentifier:"myViewController") as! UIViewController
    self.present(controller, animated: true, completion: nil)`
    

    **

    如果您要推送VC,请使用以下代码:

    let myViewController = self.storyboard?.instantiateViewController(withIdentifier: "myViewController") as! Conversation_VC
    self.navigationController?.pushViewController(myViewController, animated: true)