向下倾斜任何?到UIBarButtonItem

问题描述 投票:0回答:1
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。为什么?我应该如何检查发件人是什么?

ios swift xcode sender
1个回答
2
投票

你 - 开发者 - 应该知道prepare(for的发件人是谁。只有三种可能性:

  1. 如果segue连接到Interface Builder中的表视图单元格,那么sender就是UITableViewCell
  2. 如果segue连接到Interface Builder中的视图控制器,那么sender就是UIViewController
  3. 如果在代码中调用performSegue,那么sender就是你在sender参数中传递的任何内容(包括nil)

只有在按钮的performSegue中调用IBAction并将按钮实例作为sender传递时,您的代码才能工作

@IBAction func addCard(_ sender : UIBarButtonItem)
{
    self.performSegue(withIdentifier:"addEditSegue", sender: sender)
}
© www.soinside.com 2019 - 2024. All rights reserved.