当点击表视图中的元素时,怎么转到另一个视图控制器?

原学程将引见当面打表望图中的元素时,若何转到另外一个望图掌握器?的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

当点击表视图中的元素时,怎么转到另一个视图控制器? 教程 第1张

成绩描写

我在TableViewCell中有1个UIView,当用户面打此UIView时,它会转到另外一个望图掌握器并传播数据。

是以在TableViewCellClass中我履行了以下操纵:

我树立了1个协定,并在用户翻开UIView时检测到"Tap"脚势。此部门任务正常:

protocol MyDelegate : class {
  func runThisFunction(myString : String)
}

class MyTableViewCell: UITableViewCell {

  weak var delegate : MyDelegate?

  ...other code here

  //here detect the tap 
  let tap = UITapGestureRecognizer(target: self, action: #selector(hereTapped))
  self.myUIElementInThisCell.addGestureRecognizer(tap)

}

@objc func hereTapped(sender: UITapGestureRecognizer? = nil){
 self.delegate?.runThisFunction(myString: "I am a man")
}

是以,在包括此TableView的望图掌握器中,我履行了以下操纵:

我扩大了MyDelegateAS子类,而后在外面附带了协定函数,以下所示

class MyViewController: UIViewController,MyDelagate{

func runThisFunction(myString : String) {
  print("Tapped in view controller")
 self.performSegue(withIdentifier: "MySegue",sender : self)
}

 override func viewDidLoad() {
 super.viewDidLoad()

 let tableViewCell = MyTableViewCell()
 tableViewCell.delegate = self
 }
}

成果:

完成上述一切操纵后,当我面打UIView时,它出有履行MyViewControllerClass中所述的段,乃至print()敕令也出有履行。

这么我错过了甚么?请给我1个处理计划。感谢

推举谜底

您的viewDidLoad中有成绩:

// you create a new cell
let tableViewCell = MyTableViewCell()
// set its delegate
tableViewCell.delegate = self
// and then the cell is not used for anything else

根本上,您没有是为正在显示的单位格树立拜托,而是为您在viewDidLoad中创立的另外一个虚例树立拜托。

您必需在cellForRowAt中树立拜托,以保证准确的单位格取得delegate聚集:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
 let cell = tableView.dequeueReusableCell(withIdentifier: "yourIdentifier", for: indexPath) as! MyTableViewCell
 cell.delegate = self
 return cell
}

这将为显示的这些单位格树立delegate


或许,我修议应用UITableViewDelegate中的didSelectRowAt(假如您的MyViewController完成了它):

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
 if indexPath.row == 0 { // only if it is the first cell (I assume that MyTableViewCell is first)
  runThisFunction(myString: "I am a man")
 }
}

佳了闭于当面打表望图中的元素时,怎样转到另外一个望图掌握器?的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。