У меня есть странная проблема с Xcode 8. Когда я пытаюсь нажать Ctrl + перетащить кнопку на существующую функцию, я не могу создать только новую розетку или Action. Что более странно, даже когда я создаю действие ctrl + drag, я не могу подключить событие к той же кнопке, которую я использовал для создания действия. Значок IB также пуст, так как нет связи между действием и кнопкой, но в режиме реального времени нажатие запускает действие. С другой стороны, когда я пытаюсь подключить действие к кнопке от быстрой к раскадровке, я могу (значок @IB становится "полным" ), но затем я получаю исключение в режиме реального времени, нажав нерасположенный селектор myActionWithSender
Не удается перетащить действие кнопки в существующую функцию в Xcode 8
Ответ 1
Чтобы исправить это, мне пришлось обновить свой язык проекта до Swift 3.0 из Swift 2.3
Ответ 2
В моей версии Xcode IBAction создается автоматически с помощью параметра "Любой", а не "AnyObject". Создание IBAction явно с помощью UIButton вместо этого сработало для меня.
Ответ 3
В моем случае вам нужно будет изменить Any на UIButton. Необходимо указать, что действие происходит от UIButton.
@IBAction func buttonClicked(_ sender: UIButton) {
}
Ответ 4
Нажмите UIButton, затем перейдите в "Инспектор подключений" из области "Утилиты".
Нажмите на пустой круг рядом с событием и перетащите строку в тело func.
Ответ 5
щелкните правой кнопкой мыши с помощью кнопки "Открыть", чтобы выбрать таргетинг внутри, чтобы перетащить..u попробовать это..
Ответ 6
В вашем файле .swift:
@IBAction func buttonClicked(sender: UIButton) {
// Do something
}
к
@IBAction func buttonClicked(z sender: UIButton) {
// Do something
}
Просто добавьте немного "z" (или любой другой ярлык, который вы хотите). Я попытался подчеркнуть "_", и это тоже работает, но оно дает предупреждение, поэтому я просто использовал "z" , чтобы обойти предупреждение.
Я считаю, что это ошибка в Xcode 8. Где-то (вероятно, IB) он ожидает Swift 3-совместимого кода, где первый параметр ДОЛЖЕН иметь метку. Поэтому, когда он видит слово "отправитель", он предполагает (ошибочно), что этот ярлык. Поэтому добавление метки ( "z" в моем случае) делает всех счастливыми.
Swift 2.3 не требует метки. Swift 3 делает. Таким образом, по словам Ярослава, модернизация с 2,3 до 3,0 также обойдется в этой проблеме. Но если вы застреваете на 2.3, просто добавление ярлыка, похоже, делает трюк.
Ответ 7
Изменить отправителя от Any к AnyObject работает для меня
Ответ 8
Даже в Swift 3 вы хотите изменить аргумент @IBAction
от (_ sender: Any)
до (_ sender: UIButton)
или (_ sender: AnyObject)
, но вручную.
Это может сработать.
Ответ 9
В моем случае у меня была открытая подобная раскадровка. Как только я его закрыл, а потом - один раз щелкнул кнопку, чтобы увидеть блоки вокруг нее для выравнивания. - Затем щелкнул правой кнопкой мыши и перетащил его в ViewController. - Наконец, нажмите/коснитесь, где вы хотите поместить блок кода события внутри ViewController.