gpt4 book ai didi

swift - 在具有相同 pickerview 的 UItextField 中选择行后,使行(在 pickerview 中)不可选择

转载 作者:行者123 更新时间:2023-11-30 12:53:24 25 4
gpt4 key购买 nike

我一直在寻找答案,但找不到任何明确的解决方案。我正在制作一个具有三个具有相同 UIpickerViews 的 UItextFields 的 View Controller 。如果已在另一个 UItextField 中选择了特定行,如何使不可选择的特定行改变颜色或消失?

这是我的代码:

 }
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return Array.count

}
func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
if "Shake" {
let attributesUnavailable = [NSForegroundColorAttributeName: UIColor.gray]
let attributedTitle = NSAttributedString(string: "Shake", attributes: attributesUnavailable)
return attributedTitle
}

let attributesAvailable = [NSForegroundColorAttributeName: UIColor.black]
let attributedTitle = NSAttributedString(string: Array[row], attributes: attributesAvailable)
return attributedTitle
}

public func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}

func donePicker() {
actionTextField1.resignFirstResponder()
actionTextField2.resignFirstResponder()
actionTextField3.resignFirstResponder()

}

@IBAction func save3(_ sender: AnyObject) {
if (behaviorTextField1.text?.isEmpty)! {
let behavior1Empty = UIAlertController (title: "Error", message: "Please fill-In Behavior Names and set corresponding Actions", preferredStyle: UIAlertControllerStyle.alert)

self.present(behavior1Empty, animated:true, completion:nil)

behavior1Empty.addAction(UIAlertAction(title: "Okay", style: UIAlertActionStyle.default, handler: { (action: UIAlertAction!) in


}))

}
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

if Array[row] {
pickerView.selectRow(row + 1, inComponent: 0, animated: true)
}
}
if pickerView.tag == 1 {
actionTextField1.text = Array[row]

}
else if pickerView.tag == 2 {
actionTextField2.text = Array[row]
}
else {
actionTextField3.text = Array[row]

}我们将非常感谢您的帮助!

最佳答案

它不像UITableView那么简单,但是有一个很好的方法,似乎与在Settings.app中设置IOS日期时使用的方法相同。

示例:

func pickerView(pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {

if row_cant_be_selected {
let attributesUnavailable = [NSForegroundColorAttributeName: UIColor.grayColor()]
let attributedTitle = NSAttributedString(string: YOUR_TITLE_FOR_ROW, attributes: attributesUnavailable)
return attributedTitle
}

let attributesAvailable = [NSForegroundColorAttributeName: UIColor.blackColor()]
let attributedTitle = NSAttributedString(string: YOUR_TITLE_FOR_ROW, attributes: attributesUnavailable)
return attributedTitle
}
  • 然后使用委托(delegate)的方法 pickerView(_:didSelectRow:inComponent:)了解用户何时选择了不可用的行。在此方法中,只需调用 selectRow(_:inComponent:animated:) 即可“强制”选择另一行。

示例:

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

if ROW_CANT_BE_SELECTED {
pickerView.selectRow(row + 1, inComponent: 0, animated: true)
}
}

IE:如果第 1 行不可用,则在 pickerView(_:didSelectRow:inComponent:) 上只需调用 pickerView.selectRow(row + 1, inComponent: 0,animated: true) code>。这将使 UIPickerView 跳到下一个元素。只需注意最后一个元素。

请注意row + 1,如果当前row是最后一行,则应该改为row - 1

其他方法是删除数据源上那些不可用的元素。只需重新加载其他选择器 View 数据即可。

关于swift - 在具有相同 pickerview 的 UItextField 中选择行后,使行(在 pickerview 中)不可选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40694104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com