无法从 UITableViewCell 调用 performeguewithidentifier
Posted
技术标签:
【中文标题】无法从 UITableViewCell 调用 performeguewithidentifier【英文标题】:can't call performseguewithidentifier from UITableViewCell 【发布时间】:2017-03-21 04:04:47 【问题描述】:我不能在 Infinite3TableViewCell 类里面调用 performeguewithidentifier。我知道它是 UITableViewCell。 那么,Infinite3TableViewCell中如何调用performeguewithidentifier方法呢?
我想选择一个单元格然后呈现/切换到新的 ViewController。
// MARK: - UITableViewDataSource, UITableViewDelegate 最终类 BuyTableViewController: UIViewController
@IBOutlet weak var tableView: UITableView!
didSet
tableView.delegate = self
tableView.dataSource = self
tableView.separatorStyle = .none
// MARK: - UITableViewDataSource, UITableViewDelegate 扩展 BuyTableViewController: UITableViewDataSource, UITableViewDelegate
override func viewDidLoad()
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
func numberOfSections(in tableView: UITableView) -> Int
return 5
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
switch section
case 0, 1, 2, 3, 4: return 1
default: return 0
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
switch indexPath.section
case 0:
let cell = tableView.dequeueReusableCell(withIdentifier: "Infinite0TableViewCell", for: indexPath)
return cell
case 1:
let cell = tableView.dequeueReusableCell(withIdentifier: InfiniteTableViewCell.identifier) as! InfiniteTableViewCell
return cell
case 2:
let cell = tableView.dequeueReusableCell(withIdentifier: Infinite2TableViewCell.identifier) as! Infinite2TableViewCell
return cell
case 3:
let cell = tableView.dequeueReusableCell(withIdentifier: Infinite3TableViewCell.identifier) as! Infinite3TableViewCell
return cell
case 4:
let cell = tableView.dequeueReusableCell(withIdentifier: Infinite4TableViewCell.identifier) as! Infinite4TableViewCell
return cell
default:
return UITableViewCell()
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
switch indexPath.section
case 0: return 80
case 1: return 150
case 2: return 120
case 3: return 400
case 4: return 500
default: return 0
最终类 CollectionViewCell: UICollectionViewCell
@IBOutlet weak var imgImage: UIImageView!
@IBOutlet weak var lblName: UILabel!
@IBOutlet weak var imgEffect: UIVisualEffectView!
最终类 Infinite3TableViewCell: UITableViewCell
static let identifier = "Infinite3TableViewCell"
var nameArray = ["Women's Clothing", "Beauty & Personl Care", "Women's Bags", "Men's Clothing", "Mobile & Gadgets", "Watches", "Home", "Toys", "Home Appliances"]
var imgName = [UIImage(named: "girl"), UIImage(named: "makeup"), UIImage(named: "bags"), UIImage(named: "clothing"), UIImage(named: "mobile"), UIImage(named: "watches"), UIImage(named: "living"), UIImage(named: "toys"), UIImage(named: "tools")]
扩展 Infinite3TableViewCell: UICollectionViewDelegate, UICollectionViewDataSource
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return nameArray.count
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCollectionViewCell", for: indexPath) as! CollectionViewCell
cell.imgImage.image = imgName[indexPath.row]
cell.lblName.text! = nameArray[indexPath.row]
return cell
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
print("didSelectItemAt: \(indexPath.item)")
【问题讨论】:
请只发布相关代码(并请正确格式化)。 为什么要从表格视图单元格中调用performseguewithidentifier
?单元格不直接知道它何时被单击。您会知道何时从 UITableView
委托方法 didSelectRowAt
单击单元格,这将是调用 segue 的逻辑位置。
@rmaddy 对不起。因为我第一次使用***。
【参考方案1】:
performseguewithidentifier
应该从 UIViewController
或其子类中调用。你应该让UIViewController
知道并打电话给它。
【讨论】:
那么,我该怎么办? 在您的func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
中调用performseguewithidentifier
BuyTableViewController
如果我将 didSelectItemAt 放在 BuyTableViewController 中。当我单击单元格中的 tableview 3 时,系统如何知道我单击了它? @aahung link
“单元格中的 tableview 3 是什么意思”?如果您将 tableview 的委托设置为 BuyTableViewController,则当您选择一个单元格时它会知道以上是关于无法从 UITableViewCell 调用 performeguewithidentifier的主要内容,如果未能解决你的问题,请参考以下文章
无法从 UITableViewCell 加载 UICollectionView
从使用 nasm 制作的基本 PE+ uefi 应用程序调用 ExitBootServices 时遇到问题
重新排序时无法从当前位置拖动 UITableViewCell
无法从出列可重用 UITableViewCell 加载自定义单元格
从 UITableViewCell 呈现 UIViewController:addChildViewController 无法识别的选择器发送到实例