【问题标题】:Swift - Set label to be on top of other view itemsSwift - 将标签设置在其他视图项之上
【发布时间】:2017-07-11 15:12:13
【问题描述】:

我正在使用 swift 1.2 和 Xcode 6.4 创建一个基本的草图应用程序。我正在开发的功能是为图像添加文本以供将来操作。

到目前为止,我已经将用户输入的文本通过标签添加到绘图中,但它被放置(我假设)在要绘制的 UIImage 后面。这会阻止识别相关的轻击手势。标签在绘制时也会被遮盖。

如何将标签放在其他所有内容之上以防止其被覆盖?最终目标是允许用户移动标签。

如果我使用常用​​的 Web 堆栈,我会通过 CSS 将元素的 z-index 设置为高值。

编辑:使用view.bringSubviewToFront(label) 可以防止文本被覆盖,但不允许点击手势被拾取。

这是我的代码:

    func printText(){
        println(textString)

        var label = UILabel(frame: CGRectMake(5, 100, 200, 50 ))
        label.textAlignment = NSTextAlignment.Center
        label.text = textString;

        let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap"))
        label.addGestureRecognizer(tap)

        self.view.addSubview(label);
    }

    func handleTap() {
        print("tap working")
    }

非常感谢任何帮助。

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    如果你想要 z-index 使用:

    label.layer.zPosition = 1;
    

    你也可以在父视图上使用 bringToFront 方法:

    self.view.bringSubviewToFront(label);
    

    您可以在此处检查该功能: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/

    另外,您应该添加以下内容:

    label.userInteractionEnabled = true
    

    启用触摸。

    【讨论】:

    • 这两个都停止了标签的绘制,但仍然没有拾取点击手势。
    • 因为你缺少 label.userInteractionEnabled = true
    【解决方案2】:

    尝试在父视图中使用它们:

    view.bringSubviewToFront(label)
    view.sendSubviewToBack(imageView)
    

    这完全取决于你能做什么,或者想做什么。

    【讨论】:

    • 这可以防止标签被覆盖(这很棒),但不允许拾取点击手势。
    • 顺便说一句。这与我提供的答案完全相同。
    • 答案之间只有5分钟的间隔,我没有看到你的答案,因为我没有刷新窗口。另外,您没有提到 sendSubviewToBack,它也可能有用。
    【解决方案3】:

    您可以通过以下方式调用标签到前面

    self.view.bringSubviewToFront(label)
    

    您可以通过以下方式将图像视图发送到后面

    self.view.sendSubviewToBack(imageView)
    

    【讨论】:

    • 这可以防止标签被覆盖,但不允许点击手势被拾取
    • 拉法尔和我提供的答案完全相同。
    • 对不起,我只是检查了问题,而不是其他人提供的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多