如何执行从自定义 UITableViewCell(xib) 到另一个 ViewController 的 segue 视图
Posted
技术标签:
【中文标题】如何执行从自定义 UITableViewCell(xib) 到另一个 ViewController 的 segue 视图【英文标题】:How to perform a segue view from custom UITableViewCell(xib) to another ViewController 【发布时间】:2017-04-07 21:43:57 【问题描述】:我想在我的自定义 UITableViewCell 上显示一个按钮,点击它可以将用户带到另一个屏幕。 我尝试了以下代码,但它不起作用
子视图:
@IBAction func childScreenButton(sender: AnyObject)
if let delegate = self.delegate
delegate.childButtonClickedOnCell(self)
协议:
protocol childTableCellDelegate: class
func childButtonClickedOnCell(cell: childViewCell)
父视图控制器:
func childButtonClickedOnCell(cell: FeedChildViewCell)
self.clickedIndexPath = self.feedsTableView.indexPathForCell(cell)
self.performSegueWithIdentifier("toNextScreen", sender: self)
当我测试断点时,没有进入子视图上的“delegate.childButtonClickedOnCell(self)”。如果我在这里做错了什么,请告诉我。谢谢!!
【问题讨论】:
我假设@IBAction func childScreenButton(sender: AnyObject)
在您的自定义单元类中?你在设置委托吗?
是的! IBAction func childScreenButton(sender: AnyObject) 在我的自定义单元格中,我正在设置委托@DonMag
好的 - 所以,你在 if let delegate = self.delegate
上设置了一个断点?但是点击按钮不会到达那个断点?
是的,我在 if let delegate = self.delegate 处设置了一个断点,但它没有进入 if 条件,即 delegate.childButtonClickedOnCell(self) @DonMag
此时self.delegate
的值是多少?
【参考方案1】:
我怀疑你有一些地方有问题,或者定义不正确。
我刚刚对此进行了快速测试,委托调用工作正常......看看你是否注意到任何不完全一样的东西......
//
// TestTableViewController.swift
//
// Created by DonMag on 4/7/17.
// Copyright © 2017 DonMag. All rights reserved.
//
import UIKit
protocol MyCellDelegate
func pressedButtonForMyCell(theSender: MyCell)
class MyCell: UITableViewCell
@IBOutlet weak var theLabel: UILabel!
@IBOutlet weak var theButton: UIButton!
var delegate: MyCellDelegate?
@IBAction func childScreenButton(sender: AnyObject)
delegate?.pressedButtonForMyCell(theSender: self)
class TestTableViewController: UITableViewController, MyCellDelegate
override func viewDidLoad()
super.viewDidLoad()
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 1
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 10
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! MyCell
cell.theLabel.text = "\(indexPath)"
cell.delegate = self
return cell
func pressedButtonForMyCell(theSender: MyCell)
print("delegate called", theSender)
【讨论】:
我没有在父视图控制器中定义委托,现在它工作正常。谢谢@DonMag以上是关于如何执行从自定义 UITableViewCell(xib) 到另一个 ViewController 的 segue 视图的主要内容,如果未能解决你的问题,请参考以下文章
如何从自定义 UITableViewCell 触发 segue - iOS7
如何从自定义 UITableViewCell 调用操作以重新加载 tableView
如何从自定义操作中进入删除确认状态 UITableViewCell?
编辑完成后如何从自定义uitableviewcell的文本字段向数组添加数据