2017-05-25 78 views
1

我的子视图有问题。我有2个可见的按钮和1,它应该显示后点击第一个。更准确地说,我有开始按钮,重置按钮和停止按钮。加载时应该只显示“开始”和“重置”按钮,但是当我按下开始按钮时,应该隐藏“重置”按钮并显示停止按钮。像isHidden这样的语法不起作用。问题是什么?隐藏和显示(子视图)按钮或更改标题?

星,停止和复位按钮:

var stopButton: UIButton{ 

    let stopButton = UIButton(frame: CGRect(x: 220, y: 50, width: 100, height: 100)) 
    stopButton.backgroundColor = .white 
    stopButton.setTitle("Stop", for: .normal) 
    stopButton.addTarget(self, action: #selector(stopButtonAction), for: .touchUpInside) 
    stopButton.layer.cornerRadius = 50 
    stopButton.layer.masksToBounds = true 
    stopButton.isHidden = true 

    return stopButton 
} 

var resetButton: UIButton{ 

    let resetButton = UIButton(frame: CGRect(x: 220, y: 50, width: 100, height: 100)) 
    resetButton.backgroundColor = .red 
    resetButton.setTitle("Reset", for: .normal) 
    resetButton.addTarget(self, action: #selector(resetButtonAction), for: .touchUpInside) 
    resetButton.layer.cornerRadius = 50 
    resetButton.layer.masksToBounds = true 

    return resetButton 
} 

var startButton: UIButton{ 

    let startButton = UIButton(frame: CGRect(x: 50, y: 50, width: 100, height: 100)) 
    startButton.backgroundColor = .green 
    startButton.setTitle("Start", for: .normal) 
    startButton.addTarget(self, action: #selector(startButtonAction), for: .touchUpInside) 
    startButton.layer.cornerRadius = 50 
    startButton.layer.masksToBounds = true 

    return startButton 
} 

在这里,我添加此子视图(本功能也添加UIView的,这就是所谓的viewDidLoad中):

func addBottomView() 
{ 
    let orginX = (collectionView?.frame.minX)! 
    let orginY = (collectionView?.frame.maxY)! 
    let heightOfView = view.frame.height - (view.frame.height/100) * 70 

    let bottomView = UIView(frame: CGRect(x: orginX, y: orginY, width: view.frame.width, height: heightOfView)) 
    bottomView.backgroundColor = .orange 

    view.addSubview(bottomView) 

    bottomView.addSubview(stopButton) 
    bottomView.addSubview(startButton) 
    bottomView.addSubview(resetButton) 


} 

这里是我的功能,这是连接到这个按钮:

func startButtonAction() 
{ 
    blinkAction() 
    print("START ACTION") 

    resetButton.isHidden = true 
    stopButton.isHidden = false 
    view.layoutSubviews() 
} 

func resetButtonAction() 
{ 
    print("RESET ACTION") 
    blinkAction() 

} 
func stopButtonAction() 
{ 
    print("STOP ACTION") 
    blinkAction() 

    resetButton.isHidden = false 
    stopButton.isHidden = true 
    view.layoutSubviews() 

} 

我添加layoutSubviews方法,但它没有帮助。我也尝试使用隐藏的按钮名称之前,但我也不工作。有什么建议?

+0

计算的特性创建按钮,为什么你在STOPBUTTON计算财产使用“stopButton.isHidden =真”? –

+0

因为在加载停止按钮应该被隐藏。只有点击开始按钮后 –

回答

0

可以使用懒keywoard

lazy var stopButton: UIButton = { 
     let stopButton = UIButton(frame: CGRect(x: 220, y: 50, width: 100, height: 100)) 
     stopButton.backgroundColor = .yellow 
     stopButton.setTitle("Stop", for: .normal) 
     stopButton.addTarget(self, action: #selector(stopButtonAction), for: .touchUpInside) 
     stopButton.layer.cornerRadius = 50 
     stopButton.isHidden = true 
     stopButton.layer.masksToBounds = true 
     return stopButton 
    }() 

    lazy var resetButton: UIButton = { 
     let resetButton = UIButton(frame: CGRect(x: 220, y: 50, width: 100, height: 100)) 
     resetButton.backgroundColor = .red 
     resetButton.setTitle("Reset", for: .normal) 
     resetButton.addTarget(self, action: #selector(resetButtonAction), for: .touchUpInside) 
     resetButton.layer.cornerRadius = 50 
     resetButton.layer.masksToBounds = true 
     return resetButton 
    }() 

    lazy var startButton: UIButton = { 
     let startButton = UIButton(frame: CGRect(x: 50, y: 50, width: 100, height: 100)) 
     startButton.backgroundColor = .green 
     startButton.setTitle("Start", for: .normal) 
     startButton.addTarget(self, action: #selector(startButtonAction), for: .touchUpInside) 
     startButton.layer.cornerRadius = 50 
     startButton.layer.masksToBounds = true 
     return startButton 
    }() 
0

计算出的属性startButton,stopButton,resetButton不是作为子视图添加的相同项目。计算属性不存储值,它们为您提供获取值和设置更改的方法。所以你采取的行动是隐藏的不适用于你的观点。

0

isHidden属性效果不好的原因是,当你的计算属性变量你得到一个新的实例UIButton而不是旧的。如果你想要使用计算属性,那么你应该创建懒惰属性。所以,无论何时你调用属性变量,你都会得到一个UIButton的旧实例。

0

你的属性总是创建新的按钮,所以你的引用将不会相同。当您设置isHidden时,您的按钮将被重新创建,以便设置未添加到bottomView的另一个按钮的isHidden propery。

只需使用普通的属性:

var stopButton: UIButton! 
var resetButton: UIButton! 
var startButton: UIButton! 

创建按钮:

func createButtons() { 

let stopButton = UIButton(frame: CGRect(x: 220, y: 50, width: 100, height: 100)) 
stopButton.backgroundColor = .white 
stopButton.setTitle("Stop", for: .normal) 
stopButton.addTarget(self, action: #selector(stopButtonAction), for: .touchUpInside) 
stopButton.layer.cornerRadius = 50 
stopButton.layer.masksToBounds = true 
stopButton.isHidden = true 

let resetButton = UIButton(frame: CGRect(x: 220, y: 50, width: 100, height: 100)) 
resetButton.backgroundColor = .red 
resetButton.setTitle("Reset", for: .normal) 
resetButton.addTarget(self, action: #selector(resetButtonAction), for: .touchUpInside) 
resetButton.layer.cornerRadius = 50 
resetButton.layer.masksToBounds = true 

let startButton = UIButton(frame: CGRect(x: 50, y: 50, width: 100, height: 100)) 
startButton.backgroundColor = .green 
startButton.setTitle("Start", for: .normal) 
startButton.addTarget(self, action: #selector(startButtonAction), for: .touchUpInside) 
startButton.layer.cornerRadius = 50 
startButton.layer.masksToBounds = true 
} 

添加为子视图:

bottomView.addSubview(stopButton) 
bottomView.addSubview(startButton) 
bottomView.addSubview(resetButton) 

,并利用它们:

resetButton.isHidden = false 
stopButton.isHidden = true