Ios 如何确保我的for-in循环只允许我执行一个segue?

Ios 如何确保我的for-in循环只允许我执行一个segue?,ios,arrays,swift,control-flow,for-in-loop,Ios,Arrays,Swift,Control Flow,For In Loop,我在视图控制器中有一个tableview,它通过一个segue连接到3个不同的视图控制器。每个都有一个标识符 为了对相应的视图控制器执行segue,我创建了一个数组,其中包含每个segue的标识符。像这样: var tableauSegues = ["versChapitre1", "versChapitre2", "versChapitre3"] 为了根据数组的索引管理segue,我选择在iB操作内部使用for-In循环,如下所示: @IBAction func versHistoire(_

我在视图控制器中有一个tableview,它通过一个segue连接到3个不同的视图控制器。每个都有一个标识符

为了对相应的视图控制器执行segue,我创建了一个数组,其中包含每个segue的标识符。像这样:

var tableauSegues = ["versChapitre1", "versChapitre2", "versChapitre3"]
为了根据数组的索引管理segue,我选择在iB操作内部使用for-In循环,如下所示:

@IBAction func versHistoire(_ sender: UIButton) {

    for i in tableauSegues {

        performSegue(withIdentifier: i, sender: self)
    }

}
问题是所有3个阶段都执行。我一次只想表演一段


有什么想法吗?

显然,您希望避免循环,而只想使用
tableasegues[row]
。但是诀窍是如何获得

底线是,您应该让单元格处理单元格的点击,并让单元格在点击其按钮时通知表视图控制器。但诀窍在于,当它这样做时,它应该为自己提供一个引用,这样视图控制器就可以确定哪一行的按钮被点击了

因此,直接在按钮和视图控制器之间删除现有的
@IBAction
,并将其连接到单元格基类中的
@IBAction

//  CustomCell.swift

import UIKit

protocol CustomCellDelegate: class {
    func didTapButton(_ sender: Any, in cell: CustomCell)
}

class CustomCell: UITableViewCell {
    @IBOutlet weak var customLabel: UILabel!

    static let preferredReuseIdentifier = "CustomCell"

    weak var delegate: CustomCellDelegate?

    func configure(text: String, delegate: CustomCellDelegate) {
        customLabel.text = text
        self.delegate = delegate
    }

    @IBAction func didTapButton(_ sender: Any) {
        delegate?.didTapButton(sender, in: self)
    }
}
注意,在配置该单元格时,我将让表视图不仅提供需要在单元格中显示的任何值,而且还指示它是该单元格的委托:

//  ViewController.swift

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var tableView: UITableView!

    var tableauSegues = ["versChapitre1", "versChapitre2", "versChapitre3"]
}

extension ViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return tableauSegues.count
    }

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

extension ViewController: CustomCellDelegate {
    func didTapButton(_ sender: Any, in cell: CustomCell) {
        let row = tableView.indexPath(for: cell)!.row
        let identifier = tableauSegues[row]
        performSegue(withIdentifier: identifier, sender: self)
    }
}

是什么决定了要执行哪个阶段?表格单元格的索引?为什么循环?这个按钮是用来在3个不同的控制器上切换的吗?答案不是很明显,不要执行
for
循环。解释你想在这个动作函数中做什么,执行一个步骤,我想是哪一个?@TusharSharma我有一个原型单元格,当应用程序加载时返回3个不同的tableview单元格。由于它们是动态单元,我无法通过segue将每个单元链接到视图控制器。我试图通过一个segue,通过创建一个包含每个segue的所有标识符的数组,绕过将保存表视图单元格的VC与不同的视图控制器(每个单元格一个)链接起来的方法。在这种情况下,不应该对每个循环使用。如果此UIButton对所有单元格都相同,则可以:1)在CellForIndexAttendeXPath方法中获取UIButton并为按钮设置标记,然后在按钮操作上切换“sender.tag”,并使用所需的标识符执行segue。2) 我使用了你提供的代码,但是做了一些修改。我就是这么做的。非常感谢。希望我能让它工作。