当用户从viewcontroller 2中的tableview单元格中单击一个单元格时,我试图让viewcontroller 1中的tableview单元格更改。我知道我必须使用该函数
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
但是,我不确定如何实现我想要的目标。
这是我的代码:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let indexPath = changeHotelTableView.indexPathForSelectedRow;
let currentCell = changeHotelTableView.cellForRow(at: indexPath!) as! ChangeHotelTableViewCell
var valueToPass = currentCell.textLabel?.text
}
我想将valueToPass变量放入另一个'视图控制器;说这个叫做timeViewController,带有timeTableView和timeTableViewCell。我该怎么做?
感谢您的帮助和提前时间
答案 0 :(得分:0)
也许您应该尝试使用Protocol。
ViewController2:
protocol UserPressTheCell: NSObjectProtocol
{
func didUserPressTheCellWith(indexPath: IndexPath, text: String)
}
class ViewController2: UIViewController
{
//declare delegate
weak var delegate: UserPressTheCell?
....
func tableview(_ tableview: UITableView, didSelectRowAt indexPath: IndexPath)
{
let indexPath = changeHotelTableView.indexPathForSelectedRow;
let currentCell = changeHotelTableView.cellForRow(at: indexPath!) as! ChangeHotelTableViewCell
self.delegate?.didUserPressTheCellWith(indexPath: indexPath, text: currentCell.textLabel?.text)
}
}
然后在ViewController1中实现:
class ViewController1: UIViewController, UserPressTheCell
{
@IBOutlet weak var tableview: UITableView!
...
//MARK: UserPressTheCell
func didUserPressTheCellWith(indexPath: IndexPath, text: String)
{
let cell = self.tableView.cellForRow(at: indexPath!) as! "Your VC1's cell"
cell.textLabel?.text = text
}
}
确保代表不会是nil:
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
let vc2 = segue.destination as! ViewController2
vc2.delegate = self
}
或任何你转向ViewController2的地方。
也许这是达到你想要的最佳方式。