Селектор вызовов из другого класса - Swift 3 - PullRequest
0 голосов
/ 15 сентября 2018

Я создаю UIbutton из "Utils_class" и возвращаю его моему классу "getBtsDetails". Я успешно добиваюсь вызова функции "buttonAction", реализованной в "getBtsDetails", но затем она возвращает ошибку

«Неожиданно найден ноль при развертывании необязательного значения»

getBtsDetails :

let Utils_Class = Utils()
var labelY : Int = 90

override func viewDidLoad() {
    super.viewDidLoad()

    WS_Class.GetDiplomaSubject(id: Int(self.BTS_id)!) { number, responseObject, error in
        if((error) == nil) {

            #let's create an UIbutton from Utils_class which gonna call the buttonAction below
self.scrollview.addSubview(self.Utils_Class.createButton(text: "Calcul", buttonY:self.labelY+30))
            self.scrollview.contentSize.height = CGFloat(self.labelY+40)
        }
    }
}

@objc func buttonAction(_ sender:UIButton!)
{
    #the error occurs here
    print(self.Utils_Class.getTextFields(view : self.scrollview)/1)
}

И мой второй класс, Utils:

public func createButton(text: String!, buttonY: Int!) -> UIButton {
    helpClasses = GetBTSDetails.init()
    let button = UIButton(type: UIButtonType.system) as UIButton
    button.frame = CGRect(x:0, y:buttonY, width:self.screenWidth/5, height:15)
    button.backgroundColor = UIColor.lightGray
    button.setTitle(text, for: UIControlState.normal)
    button.tintColor = UIColor.black
    button.addTarget(btsClasse, action: #selector(btsClasse.buttonAction(_:)), for: .touchUpInside)

    return button
}

var btsClasse: GetBTSDetails!

Ответы [ 2 ]

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

Хорошо, я наконец добился успеха, просто создав новый экземпляр моего класса и заменив:

var btsClasse: GetBTSDetails!

на

var btsClasse = GetBTSDetails()

Таким образом, мой класс "GetBTSDetails", всефункции, переменные уже инициализированы, что позволяет мне вызывать действие UIButton.

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

Потому что вы его не инициировали

var btsClasse: GetBTSDetails!

так, когда цель бежит

button.addTarget(btsClasse, action: #selector(btsClasse.buttonAction(_:)),for: .touchUpInside

то, что в buttonAction будет равно nil, поэтому вам нужно связать btsClasse объект с представленным экземпляром, на который вы ссылаетесь селектором из

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...