无法找到带有标签的视图
unable to find view with tag
在我的 viewWillAppear() 中,我创建了一个标签并给它一个标签。当满足另一个条件时,我尝试删除标签,但由于某种原因,这不起作用并且标签仍在视图中。我一定是做错了什么...
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
var label: UILabel?
// Add label if there are no recipes
if (recipeBook.recipesArr.count == 0) {
label = self.view.viewWithTag(123) as? UILabel
//label?.tag = 123 // arbitrary num
label = UILabel(frame: CGRect(x: 0, y: self.view.frame.height/3, width: self.view.frame.width, height: 100))
label?.text = "Add A Recipe"
label?.textColor = UIColor(red:0.93, green:0.92, blue:0.92, alpha:1.0)
label?.font = label?.font.withSize(36)
label?.textAlignment = .center
self.view.addSubview(label!)
}
else {
// remove it
if let foundLabel = self.view.viewWithTag(123) {
foundLabel.removeFromSuperview()
} else {
print("Couldn't find label with tag in view")
}
}
}
我没有意识到这一行 label = UILabel(frame: CGRect(x: 0, y: self.view.frame.height/3, width: self.view.frame.width, height: 100))
我正在创建一个默认标签为 0 的新标签。将其更改为 label?.frame = CGRect(x: 0, y: self.view.frame.height/3, width: self.view.frame.width, height: 100)
这样我就不会创建新标签一切正常。愚蠢的错误。
您的代码没有按照您的想法运行。如果您的 recipesArr 为空(或更准确地说计数为零),您正试图找到带有标签 123 的 label/view。然后将忽略它并创建一个新标签但不给它标签。
您需要做的是在您创建标签 123 之后分配您创建的标签,如下所示:
label?.tag = 123
然后您将创建标签并设置它的标签,以便随后可以找到它。
您正在 label = UILabel(frame: CGRect
行后重新创建标签
您可以像这样在没有可选参数的情况下以编程方式创建标签:
lazy var recipeLabel: UILabel = {
let label = UILabel(frame: CGRect(x: 0, y: self.view.frame.height/3, width: self.view.frame.width, height: 100))
label.tag = 123
label.text = "Add A Recipe"
label.font = UIFont.systemFont(ofSize: 17.0)
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
然后使用 iOS 9+ constraints if needed:
将其添加到您的子视图
self.view.addSubview(recipeLabel)
然后您可以通过简单地引用视图 recipeLabel
或 .tag
属性 如果您愿意,可以在任何地方访问视图。
在我的 viewWillAppear() 中,我创建了一个标签并给它一个标签。当满足另一个条件时,我尝试删除标签,但由于某种原因,这不起作用并且标签仍在视图中。我一定是做错了什么...
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
var label: UILabel?
// Add label if there are no recipes
if (recipeBook.recipesArr.count == 0) {
label = self.view.viewWithTag(123) as? UILabel
//label?.tag = 123 // arbitrary num
label = UILabel(frame: CGRect(x: 0, y: self.view.frame.height/3, width: self.view.frame.width, height: 100))
label?.text = "Add A Recipe"
label?.textColor = UIColor(red:0.93, green:0.92, blue:0.92, alpha:1.0)
label?.font = label?.font.withSize(36)
label?.textAlignment = .center
self.view.addSubview(label!)
}
else {
// remove it
if let foundLabel = self.view.viewWithTag(123) {
foundLabel.removeFromSuperview()
} else {
print("Couldn't find label with tag in view")
}
}
}
我没有意识到这一行 label = UILabel(frame: CGRect(x: 0, y: self.view.frame.height/3, width: self.view.frame.width, height: 100))
我正在创建一个默认标签为 0 的新标签。将其更改为 label?.frame = CGRect(x: 0, y: self.view.frame.height/3, width: self.view.frame.width, height: 100)
这样我就不会创建新标签一切正常。愚蠢的错误。
您的代码没有按照您的想法运行。如果您的 recipesArr 为空(或更准确地说计数为零),您正试图找到带有标签 123 的 label/view。然后将忽略它并创建一个新标签但不给它标签。
您需要做的是在您创建标签 123 之后分配您创建的标签,如下所示:
label?.tag = 123
然后您将创建标签并设置它的标签,以便随后可以找到它。
您正在 label = UILabel(frame: CGRect
您可以像这样在没有可选参数的情况下以编程方式创建标签:
lazy var recipeLabel: UILabel = {
let label = UILabel(frame: CGRect(x: 0, y: self.view.frame.height/3, width: self.view.frame.width, height: 100))
label.tag = 123
label.text = "Add A Recipe"
label.font = UIFont.systemFont(ofSize: 17.0)
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
然后使用 iOS 9+ constraints if needed:
将其添加到您的子视图 self.view.addSubview(recipeLabel)
然后您可以通过简单地引用视图 recipeLabel
或 .tag
属性 如果您愿意,可以在任何地方访问视图。