#swift #uipickerview
#swift #uipickerview
Вопрос:
Я хочу создать viewcontroller, который содержит три pickerviews (который имеет три одинаковых параметра). У меня возникли проблемы с тем, как отобразить одну конкретную строку на ярлыке. Мой код:
Я изменил другие части, все еще получая ошибки. Отредактировал первые буквы переменных в нижний регистр.
@IBOutlet weak var picker1: UIPickerView!
@IBOutlet weak var picker2: UIPickerView!
@IBOutlet weak var picker3: UIPickerView!
var Array = ["Shake","Swipe Up","Swipe Right"]
@IBOutlet weak var label1: UILabel!
@IBOutlet weak var label2: UILabel!
@IBOutlet weak var label3: UILabel!
var placementAnswer = 0
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
picker1.delegate = self
picker1.dataSource = self
picker1.tag = 1
picker2.delegate = self
picker2.dataSource = self
picker2.tag = 2
picker3.delegate = self
picker3.dataSource = self
picker3.tag = 3
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return Array[row]
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return Array.count
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
@IBAction func save3(_ sender: AnyObject) {
}
@IBAction func save2(_ sender: AnyObject) {
}
@IBAction func save1(_ sender: AnyObject) {
if (placementAnswer == 0){
label1.text = "Shake"
}
else if(placementAnswer == 1){
label1.text = "Swipe Up"
}
else{
label1.text = "Swipe Right"
}
if (placementAnswer == 0){
label2.text = "Shake"
}
else if(placementAnswer == 1){
label2.text = "Swipe Up"
}
else{
label2.text = "Swipe Right"
}
if (placementAnswer == 0){
label3.text = "Shake"
}
else if(placementAnswer == 1){
label3.text = "Swipe Up"
}
else{
label3.text = "Swipe Right"
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
picker1.delegate = self
picker1.dataSource = self
picker1.tag = 1
picker2.delegate = self
picker2.dataSource = self
picker1.tag = 2
picker3.delegate = self
picker3.dataSource = self
picker1.tag = 3
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView.tag == 1 {
// do things for pickerview 1
label1.text = row
}
else if pickerView.tag == 2 {
// do things for pickerview 2
label2.text = row
}else {
// do for pickerview 3
}
placementAnswer = row
}
}
Комментарии:
1.почему у вас есть два
-viewDidLoad()
метода?2. Я тоже не знаю. Когда я удаляю любой из них, я получаю ошибки.
3. Я удалил второй. проблема решена.
Ответ №1:
Дифференцируйте с помощью tag
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
picker1.delegate = self
picker1.dataSource = self
picker1.tag = 1
picker2.delegate = self
picker2.dataSource = self
picker1.tag = 2
picker3.delegate = self
picker3.dataSource = self
picker1.tag = 3
}
итак, в ваших методах делегирования просто проверьте тег
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return Array[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView.tag == 1 {
// do things for pickerview 1
Label1.text = Array[row]
}
else if pickerView.tag == 2 {
// do things for pickerview 2
Label2.text = Array[row]
}else {
// do for pickerview 3
}
}
Комментарии:
1. Что вы подразумеваете под //do things для pickerview 1? Я действительно новичок в кодировании @h44f33z
2. @VonRalphMarquez я обновляю метод, в котором выбран параметр выбора. таким образом, вы можете определить, какой pickerview в данный момент выбирается пользователем
3. Я получаю эту ошибку: не удается присвоить значение типа ‘Int’ типу ‘String?’ в этих строках:
4. Label1.text = строка
5. просто обновите до
array[row]
. пожалуйста, избегайте использования переменной с прописными буквами в первой букве и использования того же имени, что и SwiftArray
class 🙂
Ответ №2:
Вот ты где @ h44f33z. Как я могу сделать каждый раздел зависимым друг от друга? например, если я выберу «встряхивание» для имени поведения 1, оно не будет доступно для имен поведения 2 и 3. Каждый раздел имени поведения будет иметь одно соответствующее действие. Спасибо!
Комментарии:
1. @h44f33z вот изображение.
2. Я буду использовать данные в этом контроллере представления для контроллера представления панели жестов. Итак, если выполняется жест встряхивания или смахивания, на экране появится название поведения и соответствующий жест, возможно, через alert? @h44f33z.