Подтвердить что ты не робот

Не удается перетащить действие кнопки в существующую функцию в Xcode 8

У меня есть странная проблема с Xcode 8. Когда я пытаюсь нажать Ctrl + перетащить кнопку на существующую функцию, я не могу создать только новую розетку или Action. Что более странно, даже когда я создаю действие ctrl + drag, я не могу подключить событие к той же кнопке, которую я использовал для создания действия. Значок IB также пуст, так как нет связи между действием и кнопкой, но в режиме реального времени нажатие запускает действие. С другой стороны, когда я пытаюсь подключить действие к кнопке от быстрой к раскадровке, я могу (значок @IB становится "полным" ), но затем я получаю исключение в режиме реального времени, нажав нерасположенный селектор myActionWithSender введите описание изображения здесь введите описание изображения здесь

4b9b3361

Ответ 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.