这是我的代码。我正在试图执行一个。我有一个条按钮项以及一排排,行执行相同的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")
}
或
呼叫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
。您还可以通过右键单击单元格并拖动到视图控制器,然后删除您的didSelectRow
实现。