Ios 表格单元格是一个大问题

Ios 表格单元格是一个大问题,ios,swift,uitableview,Ios,Swift,Uitableview,我会尽可能清楚地说明这一点。在我的Xcode项目中,我重用了一个原型单元,我希望每个单元打开一个不同的视图控制器。你们觉得我怎么能做到 下面是my Main.storyboard中可重用单元的图片: 以下是重复使用单元格的结果: 下面是我的控制器类的代码: import UIKit class NewsTableViewController: UITableViewController { @IBOutlet var menuButton:UIBarButtonItem! @

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

下面是my Main.storyboard中可重用单元的图片:

以下是重复使用单元格的结果:

下面是我的控制器类的代码:

import UIKit

class NewsTableViewController: UITableViewController {

    @IBOutlet var menuButton:UIBarButtonItem!
    @IBOutlet var extraButton:UIBarButtonItem!

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.estimatedRowHeight = 242.0
        tableView.rowHeight = UITableViewAutomaticDimension

        if revealViewController() != nil {
            menuButton.target = revealViewController()
            menuButton.action = #selector(SWRevealViewController.revealToggle(_:))

            revealViewController().rightViewRevealWidth = 150
            extraButton.target = revealViewController()
            extraButton.action = #selector(SWRevealViewController.rightRevealToggle(_:))

            view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        // Return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // Return the number of rows
        return 3
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! NewsTableViewCell

        // Configure the cell...
        if indexPath.row == 0 {
            cell.postImageView.image = UIImage(named: "watchkit-intro")
            cell.postTitleLabel.text = "WatchKit Introduction: Building a Simple Guess Game"
        } else if indexPath.row == 1 {
            cell.postImageView.image = UIImage(named: "custom-segue-featured-1024")
            cell.postTitleLabel.text = "Building a Chat App in Swift Using Multipeer Connectivity Framework"
        } else {
            cell.postImageView.image = UIImage(named: "webkit-featured")
            cell.postTitleLabel.text = "A Beginner’s Guide to Animated Custom Segues in iOS 8"
        }

        return cell
    }

}
为了清楚起见,我希望pic2中的每个单元格打开一个不同的视图控制器。例如,我希望单元格1打开新视图控制器1,单元格2打开新视图控制器2,单元格3打开新视图控制器3


谢谢你的阅读

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

e、 g


您必须实现tableView,didSelectRowAt::

或者,您可以向表视图单元格中添加手势识别器,并实现自定义单元格委托。不过,在你的情况下,似乎没有必要这样做,所以我不推荐这样做。这似乎有点过分了。但是,如果您感兴趣:

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.
    }
}
对于这两个错误

从main.storyboard中删除segue,因为您正在从storyboard中使用segue,但在代码工作中,您需要显示ViewConroller

在代码工作中,将行替换为

**

**

如果您正在推动VC,请使用以下代码:

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

我想是这样的

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
  }
}

表格单元格是一个大的视图控制器,这意味着什么?我想我有一个问题,为什么要每个单元格打开一个不同的视图控制器?是否有x种不同类型的视图控制器,某些单元格将触发一种类型,而其他单元格将触发其他类型?还是计划让tableview中的每个单元格打开不同的视图控制器?这促使我再次问:为什么?@WERUreo是的!你猜对了。他想在点击每个不同的单元格时打开不同的VC。但我不明白,如果他的UITableView中有50个单元格,那么他需要50个VC,这不是一个好做法。@appmaker重用您的代码和VC。在你的问题中提到为什么不同的单元格点击需要不同的VC,因为这不是一个好的做法。我们中的任何人都可以告诉你任何好的方法,但首先要提到你的最终结果。@the_dahiya_boy我只想要我的UITableViewController中的三个单元格,我最近发布了一个关于我遇到的错误的更新。请检查一下。谢谢Xcode告诉我你的代码不起作用,我已经删除了segues。Xcode告诉我这是预期的declaration@appmaker给我你的Gmail iD,我会把这方面的演示寄给你。我的电子邮件地址是gregjohnson88888@gmail.commy电子邮件地址是gregjohnson88888@gmail.com
`let storyboard = UIStoryboard(name: "main.Storyboard", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier:"myViewController") as! UIViewController
self.present(controller, animated: true, completion: nil)`
let myViewController = self.storyboard?.instantiateViewController(withIdentifier: "myViewController") as! Conversation_VC
self.navigationController?.pushViewController(myViewController, animated: true)
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
  }
}