Несколько просмотров

#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] . пожалуйста, избегайте использования переменной с прописными буквами в первой букве и использования того же имени, что и Swift Array class 🙂

Ответ №2:

введите описание изображения здесь

Вот ты где @ h44f33z. Как я могу сделать каждый раздел зависимым друг от друга? например, если я выберу «встряхивание» для имени поведения 1, оно не будет доступно для имен поведения 2 и 3. Каждый раздел имени поведения будет иметь одно соответствующее действие. Спасибо!

Комментарии:

1. @h44f33z вот изображение.

2. Я буду использовать данные в этом контроллере представления для контроллера представления панели жестов. Итак, если выполняется жест встряхивания или смахивания, на экране появится название поведения и соответствующий жест, возможно, через alert? @h44f33z.