沮丧任何?到 UIBarButtonItem
Downcasting Any? to UIBarButtonItem
override func prepare(for segue: UIStoryboardSegue, sender:
Any?) {
if segue.identifier == "detailSegue" {
let indexPath = tableView.indexPathForSelectedRow!
let card = cards[indexPath.row]
let detailTableViewController = segue.destination as! DetailTableViewController
detailTableViewController.card = card
detailTableViewController.picture = card.image
} else if segue.identifier == "addEditSegue" {
let addEditTableViewController = segue.destination as! AddEditTableViewController
let buttonPressed = sender as? UIBarButtonItem
if buttonPressed == cardsAddButton {
addEditTableViewController.isNewCard = true
} else {
addEditTableViewController.isNewCard = false
}
}
}
嗨,我是 Swift 的新手。我需要通过点击 UIBarButtonItem (cardsAddButton) 或点击 UITableView 的单元格来执行相同的 segue。使用 print 语句我发现当我点击 cardsAddButton 时 buttonPressed 为 nil。为什么?我应该如何检查发件人是什么?
你——开发者——应该知道 prepare(for
的发件人是谁。只有三种可能:
- 如果 segue 连接到 Interface Builder 中的 table 视图单元格 那么
sender
就是 UITableViewCell
.
- 如果 segue 连接到 Interface Builder 中的 view controller 那么
sender
就是 UIViewController
.
- 如果在代码中调用
performSegue
,那么 sender
就是您在 sender
参数中传递的任何内容(包括 nil)
.
只有在按钮的 IBAction
中调用 performSegue
并将按钮实例作为 sender
传递,您的代码才能工作
@IBAction func addCard(_ sender : UIBarButtonItem)
{
self.performSegue(withIdentifier:"addEditSegue", sender: sender)
}
override func prepare(for segue: UIStoryboardSegue, sender:
Any?) {
if segue.identifier == "detailSegue" {
let indexPath = tableView.indexPathForSelectedRow!
let card = cards[indexPath.row]
let detailTableViewController = segue.destination as! DetailTableViewController
detailTableViewController.card = card
detailTableViewController.picture = card.image
} else if segue.identifier == "addEditSegue" {
let addEditTableViewController = segue.destination as! AddEditTableViewController
let buttonPressed = sender as? UIBarButtonItem
if buttonPressed == cardsAddButton {
addEditTableViewController.isNewCard = true
} else {
addEditTableViewController.isNewCard = false
}
}
}
嗨,我是 Swift 的新手。我需要通过点击 UIBarButtonItem (cardsAddButton) 或点击 UITableView 的单元格来执行相同的 segue。使用 print 语句我发现当我点击 cardsAddButton 时 buttonPressed 为 nil。为什么?我应该如何检查发件人是什么?
你——开发者——应该知道 prepare(for
的发件人是谁。只有三种可能:
- 如果 segue 连接到 Interface Builder 中的 table 视图单元格 那么
sender
就是UITableViewCell
. - 如果 segue 连接到 Interface Builder 中的 view controller 那么
sender
就是UIViewController
. - 如果在代码中调用
performSegue
,那么sender
就是您在sender
参数中传递的任何内容(包括nil)
.
只有在按钮的 IBAction
中调用 performSegue
并将按钮实例作为 sender
@IBAction func addCard(_ sender : UIBarButtonItem)
{
self.performSegue(withIdentifier:"addEditSegue", sender: sender)
}