问题描述
显示此屏幕时,我将顶部的开关设置在 viewDidLoad 中的关闭位置。我还将通过 IBOutlet 连接的 tableViewCells 设置为 0.5(不起作用),并且文本字段不响应用户交互(起作用)。当顶部的开关打开时,tableViewCells 的alpha(应该是)被恢复,并且用户交互被重新启用。这有效。当开关关闭时,单元格的 alpha 将返回到 0.5,并且文本字段用户交互再次设置为 false。这整条线都有效。基本上,开关工作完美,但 viewdidload 没有。所以,我想知道:为什么在 viewDidLoad 中设置 tableViewCells 的 alpha 不起作用?我肯定在某个地方犯了一个错误,但这似乎很简单,我无法弄清楚。相关代码如下:
@IBOutlet var switchCell1: UITableViewCell!
@IBOutlet var theSwitch1: UISwitch!
@IBOutlet var countryCell1: UITableViewCell!
@IBOutlet var cityCell1: UITableViewCell!
@IBOutlet var locationCell1: UITableViewCell!
@IBOutlet var mainLocationTextField: UITextField!
@IBOutlet var countryTextField1: UITextField!
@IBOutlet var cityTextField1: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
theSwitch1.isOn = false
//these three lines don't work,it is not "faded" out,if that's the right word
countryCell1.alpha = 0.5
cityCell1.alpha = 0.5
locationCell1.alpha = 0.5
//these three lines work
countryCell1.isUserInteractionEnabled = false
cityCell1.isUserInteractionEnabled = false
locationCell1.isUserInteractionEnabled = false
}
//this function is connected to "theSwitch" and works perfectly
@IBAction func switch1Toggled(){
if theSwitch1.isOn{
countryCell1.alpha = 1.0
cityCell1.alpha = 1.0
locationCell1.alpha = 1.0
countryCell1.isUserInteractionEnabled = true
cityCell1.isUserInteractionEnabled = true
locationCell1.isUserInteractionEnabled = true
}else{
countryCell1.alpha = 0.5
cityCell1.alpha = 0.5
locationCell1.alpha = 0.5
countryCell1.isUserInteractionEnabled = false
cityCell1.isUserInteractionEnabled = false
locationCell1.isUserInteractionEnabled = false
}
}
我真的不明白为什么在 viewDidLoad 中使用 .alpha 对我不起作用,但它在另一个函数中起作用。 顺便说一下,我还尝试在 viewDidLoad 中调用 switch1Toggled() 以便该函数设置 alpha,但由于某种原因,这也不起作用。 提前感谢您抽出宝贵时间。
解决方法
UI 元素尚未在 viewDidLoad()
中完全初始化。
您可以在 viewDidLayoutSubviews()
中设置它们的初始状态。
请注意,viewDidLayoutSubviews()
被多次调用 - 事实上,它在使用表视图时经常被调用 - 因此您需要设置一个 Bool“标志”以仅运行一次初始化:>
var firstTime: Bool = true
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if firstTime {
firstTime = false
theSwitch1.isOn = false
countryCell1.alpha = 0.5
cityCell1.alpha = 0.5
locationCell1.alpha = 0.5
countryCell1.isUserInteractionEnabled = false
cityCell1.isUserInteractionEnabled = false
locationCell1.isUserInteractionEnabled = false
}
}