swift - 无法找到带有标签的 View

标签 swift viewwillappear viewwithtag

在我的 viewWillAppear() 中,我创建了一个标签并给它一个标签。当满足另一个条件时,我尝试删除标签,但由于某种原因,这不起作用并且标签仍在 View 中。我一定做错了什么......

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) 这样我就不会创建新标签并且一切正常。愚蠢的错误。

最佳答案

您的代码没有按照您的想法进行操作。如果您的 RecipeArr 为空(或更准确地说计数为零),您将尝试查找带有标签 123 的标签/ View 。然后该标签/ View 将​​被忽略,您将创建一个新标签,但不为其指定标签。

您需要做的是在创建标签 123 后分配您创建的标签,如下所示:

label?.tag = 123

然后您将创建标签并设置其标签,以便随后可以找到它。

关于swift - 无法找到带有标签的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47946911/

相关文章:

ios - 有没有办法在 iOS 中使用照片框架锁定照片?

swift - 如何从枚举中获取字符串

swift - 相机固有分辨率与实际屏幕分辨率

swift - 在不调用 init(fileNamed :"") 的情况下从文件加载 SKScene 的方法

ios - Swift iOS -In ViewWIllAppear 如何检查切换选项卡时 ImagePicker 是否呈现或消失,或者 View 是否被推开/关闭?

ios - viewDidLoad 和 viewWillAppear 中的不同 subview 布局

swift - 如何在 Swift 中使用 ViewWithTag?

ios - 为什么这个 UIImageView 认为它是一个 UIView?

ios - 如何在数据加载过程后停止网络事件指示器

uitableview - viewWithTag 为 UITableViewCell 返回 nil