无法从UILabel的超级视图中移除UILabel

时间:2017-02-13 18:19:50

标签: ios swift

我遇到了问题。我有一个类将UILabel添加到其他视图中。

那是班级:

    class noDataColor{

        let errLabel = UILabel()

        func addNoDataLabel(_ tableView:UITableView, text:String, color: UIColor){

        //Err label

        self.errLabel.frame = CGRect(x: 15, y: 20, width: tableView.bounds.width, height: 60)
        self.errLabel.textColor = color
        self.errLabel.text = text
        self.errLabel.isHidden = false
        tableView.addSubview(self.errLabel)
        print("errLabelFrame\(errLabel.frame)") //Prints normal frame
}

    func removeNoDataLabelColor(){
        //Err label
            print("Executed")
            errLabel.isHidden = true
            errLabel.removeFromSuperview()
            errLabel.textColor = UIColor.clear
            print("errLabelFrame\(errLabel.frame)") //Prints (0.0,0.0,0.0,0.0)
        }
    }

然后我使用此行添加我的errLabel(一切正常,我的标签已添加):

noDataColor().addNoDataLabel(self.tableView, text: errorMessage!, color: .white)

但是我的问题出现了,因为这条线没有任何作用:

noDataColor().removeNoDataLabelColor()

,即使它打印"Executed"

我的问题是:如何在不使用代理的情况下删除我的errLabel。

注意:我在noDataColor类不同的类中使用这些行。

谢谢:)

1 个答案:

答案 0 :(得分:1)

每当您致电noDataColor()时,您都会创建一个新的班级实例。

noDataColor().addNoDataLabel(self.tableView, text: errorMessage!, color: .white)
noDataColor().removeNoDataLabelColor()

第二行创建了noDataColor的新实例,该实例从未调用addNoDataLabel(_, text:, color:)。你需要保留你的课程参考:

let noDataColor = noDataColor()
noDataColor.addNoDataLabel(self.tableView, text: errorMessage!, color: .white)
noDataColor.removeNoDataLabelColor()

如您所见,您需要在同一个对象上调用方法。