如何通过 UIButtons 读取 UILabel(没有文本)

Posted

技术标签:

【中文标题】如何通过 UIButtons 读取 UILabel(没有文本)【英文标题】:How to read a UILabel through UIButtons (that have no text) 【发布时间】:2016-02-12 21:15:14 【问题描述】:

我正在尝试使用UILabel 查看点数(点击UIButtons 的次数),但我只能看到数字,直到出现UIButton。即使我点击UIButton,它也会“消失”,实际上只是像self.view.backgroundColor 一样变黑,但仍会阻止UILabel 的文字被看到。

是否有任何简单的解决方案,或者最好的方法就是不让方块在那里生成,但是你将无法做到enemy.center,因为它会更难点击。

import UIKit

class ViewController: UIViewController 

    @IBOutlet weak var scoreLabel: UILabel!

    var points: Int = 0

    func randomPoint() -> CGPoint 
        let randomPoint: CGPoint = CGPoint(x:CGFloat(arc4random()%320),y:CGFloat(arc4random()%568))
        return randomPoint
    

    func randomColor() -> UIColor 
        let red = CGFloat(drand48())
        let green = CGFloat(drand48())
        let blue = CGFloat(drand48())
        return UIColor(red: red, green: green, blue: blue, alpha: 1.0)
    

    func spawnEnemy() 
        let enemy: UIButton = UIButton(frame: CGRect(x: 160, y: 160, width: 150, height: 150))
        enemy.backgroundColor = randomColor()
        enemy.center = randomPoint()
        enemy.addTarget(self, action: Selector("buttonPushed:"), forControlEvents: UIControlEvents.TouchUpInside)
        self.view.addSubview(enemy)
    

    func buttonPushed(sender : UIButton) 
        sender.backgroundColor = UIColor.blackColor()
        points = points + 1
        scoreLabel.textAlignment = .Center
        scoreLabel.text = "\(points)"
        scoreLabel.backgroundColor = UIColor.blackColor()
        if sender.frame.height < 50 || sender.frame.width < 50 
            sender.frame = CGRectMake(sender.frame.origin.x, sender.frame.origin.y, 50, 50)
            sender.backgroundColor = self.randomColor()
            sender.center = self.randomPoint()
            return
        
    

    override func viewDidLoad() 
        super.viewDidLoad()



        NSTimer.scheduledTimerWithTimeInterval(0.75, target: self, selector: Selector("spawnEnemy"), userInfo: nil, repeats: true)

    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()

    


【问题讨论】:

【参考方案1】:

您可以将标签的 zIndex 设置为更高的数字,以便它始终位于可能在完全相同位置生成的任何按钮的“前面”。默认值为 0,因此如果您将标签的 zIndex 设置为 1,按钮将在其下方生成。

【讨论】:

【参考方案2】:

如果您想在按钮后面看到标签,可以将ackgroundColor 设置为UIColor.clearColor() 而不是.blackColor()

您还可以将scoreLabel 移动到屏幕顶部的视图中,并让您的所有“敌人”在该视图下方生成。您必须修改 randomPoint() 以考虑不同的大小,但这可能比试图看穿您的按钮更好。

【讨论】:

哦,好的。谢谢你。我确实最终修改了 randomPoint() 并且效果很好。

以上是关于如何通过 UIButtons 读取 UILabel(没有文本)的主要内容,如果未能解决你的问题,请参考以下文章

SKScene 与 UIKit 元素(UIButtons,UILabel,...)的场景转换

计算 UILabel 和 UIButtons 大小来造句?

如何动态地将动态大小的 UIButtons 插入 UIStackView?

带有 UIButton 的 UILabel

UIButtons 不会在动画块期间淡出

如何处理动态创建的 UIButtons