Swift准备Segue:如何知道如果一个按钮或表格行启动Segue
问题描述:
这是我的代码。我正在尝试执行一个赛格。我有一个酒吧按钮项目以及一个行表执行相同的赛格表。我想知道按钮被点击的时间和特定行的时间。Swift准备Segue:如何知道如果一个按钮或表格行启动Segue
下面的代码工作的按钮,但没有为表中的行
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
activePlaceRow = indexPath.row
performSegue(withIdentifier: "toMap", sender: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "toMap"
{
let mapViewController = segue.destination as! ViewController
if let senderObject = sender
{
if (senderObject as! UIBarButtonItem).tag == 1
{
mapViewController.activePlaceRow = -2
}
else
{
mapViewController.activePlaceRow = activePlaceRow
}
}
}
}
答
只是通过索引路径sender
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "toMap", sender: indexPath)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "toMap"
{
let mapViewController = segue.destination as! ViewController
if let buttonItem = sender as? UIBarButtonItem, buttomItem.tag == 1 {
mapViewController.activePlaceRow = -2
}
else if let indexPath = sender as? IndexPath {
mapViewController.activePlaceRow = indexPath.row
}
}
}
答
你可以做的是一个属性添加到您的UIViewController
var isSegueFromCell:Bool = false
在你didSelectRowAt
方法您可以将此值分配为true
。然后,当你prepareForSegue
方法被调用,你检查:
if isSegueFromCell {
print("SEGUE FROM TABLE VIEW")
}
else {
print("SEGUE FROM BUTTON")
}
OR
当你调用performSegue
你可以在一个Bool
表明true
通过,如果从您的didSelectRow
方法被称为
performSegue(withIdentifier: "YourSegueID", sender: true)
然后在您的prepareForSegue
方法中检测到此
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let value = sender as? Bool {
if value {
print("FROM TABLE VIEW ROW")
} else {
print("FROM BUTTON")
}
}
}
答
一个容易的事是检查indexPathForSelectedRow
或indexPathsForSelectedRows
。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "toMap"
{
let mapViewController = segue.destination as! ViewController
if let senderObject = sender
{
if (senderObject as! UIBarButtonItem).tag == 1
{
mapViewController.activePlaceRow = -2
}
else
{
mapViewController.activePlaceRow = tableView.indexPathForSelectedRow
}
}
}
这样就不需要activePlaceRow
了。您也可以在故事板中创建一个segue,方法是右键单击该单元并拖动到视图控制器,然后删除didSelectRow
实现。