Не удается перетащить Действие кнопки в существующую функцию в Xcode 8
У меня странная проблема с Xcode 8. Когда я пытаюсь ctrl + перетащить кнопку на существующую функцию, я не могу создать только новую розетку или действие. Что еще более странно, даже когда я создаю действие с помощью ctrl + drag, я не могу подключить событие к той же кнопке, которую я использовал для создания действия. Значок IB также пуст, как нет связи между действием и кнопкой, но в режиме реального времени щелчок запускает действие. С другой стороны, когда я пытаюсь подключить действие к кнопке от swift к раскадровке, я могу (@IB icon становится "полным"), но затем я получаю исключение в режиме реального времени, нажимая непризнанный селектор myActionWithSender
9 ответов
в моей версии Xcode IBAction создается автоматически с параметром " Any "вместо"AnyObject". Создание IBAction явно с UIButton вместо этого сработало для меня.
в моем случае вам нужно будет изменить любой на UIButton. Необходимо уточнить, что действие исходит от UIButton.
@IBAction func buttonClicked(_ sender: UIButton) {
}
нажмите на UIButton, затем перейдите в "Инспектор соединений" из области утилит.
нажмите на пустой круг рядом с событием и перетащите линию в тело func.
щелкните правой кнопкой мыши с функцией открыть кнопку в выберите редактирования внутрь тащить ..вы должны попробовать это..
в вашей .быстрое изменение файла:
@IBAction func buttonClicked(sender: UIButton) {
// Do something
}
to
@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, просто добавление метки, кажется, делает трюк.
даже в Swift 3 Вы хотели бы изменить с (_ sender: Any)
to (_ sender: UIButton)
или (_ sender: AnyObject)
, но вручную.
это может сработать.
в моем случае у меня была аналогичная раскадровка. Однажды я закрыл ее, а потом ... - нажмите кнопку один раз, чтобы увидеть блоки вокруг него для выравнивания. - Затем щелкните правой кнопкой мыши и перетащите его в ViewController. - Наконец, нажмите / коснитесь, где вы хотите разместить блок кода события внутри ViewController.