Даункинг Любой? для UIBarButtonItem - PullRequest
0 голосов
/ 06 сентября 2018
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. Используя операторы print, я обнаружил, что buttonPressed равен nil, когда я нажимаю cardsAddButton. Зачем? Как мне проверить, кем был отправитель?

1 Ответ

0 голосов
/ 06 сентября 2018

Вы - разработчик - должны знать, кто является отправителем prepare(for. Есть только три возможности:

  1. Если segue подключен к ячейке табличного представления в Интерфейсном Разработчике, тогда sender - это UITableViewCell.
  2. Если segue подключен к контроллеру представления в Интерфейсном Разработчике, тогда sender - это UIViewController.
  3. Если в коде вызывается performSegue, то sender - это то, что вы передали в параметре sender (включая nil).

Ваш код может работать, только если вы наберете performSegue на IBAction кнопки и передадите экземпляр кнопки как sender

@IBAction func addCard(_ sender : UIBarButtonItem)
{
    self.performSegue(withIdentifier:"addEditSegue", sender: sender)
}
...