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
的发件人是谁。只有三种可能性:
sender
就是UITableViewCell
。sender
就是UIViewController
。performSegue
,那么sender
就是你在sender
参数中传递的任何内容(包括nil)
。只有在按钮的performSegue
中调用IBAction
并将按钮实例作为sender
传递时,您的代码才能工作
@IBAction func addCard(_ sender : UIBarButtonItem)
{
self.performSegue(withIdentifier:"addEditSegue", sender: sender)
}