2016-09-15 4 views
1

Я создал собственный класс кнопок и переопределяю все методы касания. Он отлично работает в swift 2 и Xcode 7.3.1. Но когда я открываю же приложение в Xcode 8.0, он будет показывать ошибки:Значение типа 'CustomButton' не имеет контакта 'touchDown'

Значение типа «CustomButton» имеет «приземление» ни один член

Значение типа «CustomButton» не имеет ни одного члена «touchUpInside»

Значение типа «CustomButton» не имеет члена «touchDragExit»

Значения типа «CustomButton» не имеет ни одного члена «» touchDragEnter

Значения типа «Пользовательские Кнопка»не имеет ни одного члена„“touchCancel

Вот мой код:

import UIKit 

@IBDesignable 
@objc public class CustomButton: UIButton { 

    private func addTargets() { 

     //------ add target ------- 

     self.addTarget(self, action: #selector(self.touchDown(_:)), for: UIControlEvents.TouchDown) 
     self.addTarget(self, action: #selector(self.touchUpInside(_:)), for: UIControlEvents.TouchUpInside) 
     self.addTarget(self, action: #selector(self.touchDragExit(_:)), for: UIControlEvents.TouchDragExit) 
     self.addTarget(self, action: #selector(self.touchDragEnter(_:)), for: UIControlEvents.TouchDragEnter) 
     self.addTarget(self, action: #selector(self.touchCancel(_:)), for: UIControlEvents.TouchCancel) 
    } 

    func touchDown(sender: CustomButton) { 
     self.layer.opacity = 0.4 
    } 

    func touchUpInside(sender: CustomButton) { 
     self.layer.opacity = 1.0 
    } 

    func touchDragExit(sender: CustomButton) { 
     self.layer.opacity = 1.0 
    } 

    func touchDragEnter(sender: CustomButton) { 
     self.layer.opacity = 0.4 
    } 

    func touchCancel(sender: CustomButton) { 
     self.layer.opacity = 1.0 
    } 
} 

Если кто-нибудь есть какие-либо решения, пожалуйста, дайте мне знать.

ответ

1

Если вы хотите сохранить заголовки методов, как указано в коде, вам необходимо изменить ссылки на селектор на #selector(touchDown(sender:)) и так далее.

(Как правило, у вас нет необходимости префикса self..)

Помните все функции и методы теперь имеет последовательную обработку метки для первых параметров. SE-0046

(. Вы можете найти много хороших статей, поиск с «swift3 селектором»)

Если вы хотите сохранить ссылки селектора, вам необходимо изменить методы, как:

func touchDown(_ sender: CustomButton) { 

Для добавления, #selector(touchDown) будет работать, если ваш класс имеет только один touchDown(...) способ.

+0

Спасибо .... Она работает ... – VRAwesome

0

Я нашел решение как предлагаемый @OOPer, но также необходимо изменить UIControlEvents в небольшом корпусе. В Xcode 7.3.1 было UIControlEvents.TouchDown, но теперь это должно быть UIControlEvents.touchDown.

Это будет как:

self.addTarget(self, action: #selector(touchDown(sender:)), for: UIControlEvents.touchDown) 
self.addTarget(self, action: #selector(touchUpInside(sender:)), for: UIControlEvents.touchUpInside) 
self.addTarget(self, action: #selector(touchDragExit(sender:)), for: UIControlEvents.touchDragExit) 
self.addTarget(self, action: #selector(touchDragEnter(sender:)), for: UIControlEvents.touchDragEnter) 
self.addTarget(self, action: #selector(touchCancel(sender:)), for: UIControlEvents.touchCancel) 
Смежные вопросы