Выбор UIPickerView обновляет метки и следующий выбор pickerview в Swift

#ios #swift #xcode

#iOS #swift #xcode

Вопрос:

давний слушатель, впервые вызывающий абонента 😉 Первый пост так что будь проще со мной, если я не поступил правильно, я заранее приношу извинения. Меня лучше всего описать как «трудолюбивого», когда дело доходит до кодирования, но мне это нравится. Я работаю над приложением, которое отображает разделы акта whs с использованием представлений выбора. Я могу заставить первый сборщик обновлять метки и содержимое второго сборщика, но я не могу получить какие-либо данные от второго сборщика, что бы я ни пытался. Акт состоит из разделов, подразделов, параграфов и подпунктов … не во всех разделах одинаковое количество подразделов и т.д.

Приведенный ниже код: класс ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

 @IBOutlet weak var picker1: UIPickerView!

@IBOutlet weak var sectionLabel: UILabel!
@IBOutlet weak var sectionNumberLabel: UILabel!

@IBOutlet weak var subSectionLabel: UILabel!
@IBOutlet weak var subSectionNumberLabel: UILabel!

@IBOutlet weak var paragraphLabel: UILabel!
@IBOutlet weak var paragraphNumberLabel: UILabel!

@IBOutlet weak var subParagraphLabel: UILabel!
@IBOutlet weak var subParagraphNumberLabel: UILabel!

var sections = ["","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"]
var subSections = ["","1","2","3","4","5","6","7","8","9","10"]
var paragraphs = ["","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
var subParagraphs = ["","i","ii","iii","iv","v","vi","vii","viii","ix","x","xi","xii","xiii","xiv","xv"]

override func viewDidLoad() {
    super.viewDidLoad()
    
    overrideUserInterfaceStyle = .light
    
    picker1.delegate = self
    picker1.dataSource = self

}

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

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    
    if component == 0 {
        return sections.count
    } else if component == 1 {
        return subSections.count
    } else if component == 2 {
        return paragraphs.count
    } else if component == 3 {
        return subParagraphs.count
    } else {
        return 0
    }
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    
    if component == 0 {
        return String(sections[row])
    } else if component == 1 {
        return String(subSections[row])
    } else if component == 2 {
        return String(paragraphs[row])
    } else if component == 3 {
        return String(subParagraphs[row])
    } else {
        return ""
    }
    
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    
    if component == 0 {
        
        let str = sections[row]
        
        if str == "5" {
            sectionNumberLabel.text = "5"
            subSections = ["1","2","3","4","5","6","7","8"]
            sectionLabel.text = "Meaning of a person conducting a business or undertaking"
            subSectionNumberLabel.text = "1"
            subSectionLabel.text = "For this Act, a person conducts a business or undertaking -"
        }
        else if str == "6" {
            sectionNumberLabel.text = "6"
            subSections = ["1","2","3","4","5"]
            sectionLabel.text = "Meaning of a supply"
            subSectionNumberLabel.text = "1"
            subSectionLabel.text = "A supply of a thing includes a supply and resupply of the thing by the way of sale, exchange, lease, hire or hire-purchase, whether as a principle or agent"
        }
        else if str == "7" {
            sectionNumberLabel.text = "7"
            subSections = ["1","2","3"]
            sectionLabel.text = "Meaning of a worker"
            subSectionNumberLabel.text = "1"
            subSectionLabel.text = "A person is a worker if the person carries out work in any capacity for a person conducting a business or undertaking, including work as:"
        }
        
 

Я УДАЛИЛ КОД ОТСЮДА, ПОЭТОМУ СООБЩЕНИЕ НЕ ТАКОЕ БОЛЬШОЕ

         else {
            
            subSections = [""]
            sectionLabel.text = ""
            sectionNumberLabel.text = ""
            subSectionLabel.text = ""
            subSectionNumberLabel.text = ""
            paragraphLabel.text = ""
            paragraphNumberLabel.text = ""
            subParagraphLabel.text = ""
            subParagraphNumberLabel.text = ""
        }

        picker1.reloadAllComponents()
     
    }
    
}
 

}

Второй сборщик отображает правильное количество подразделов, но когда я перемещаю этот сборщик, ничего updates…my вопрос в следующем: как мне получить информацию от второго сборщика, третьего сборщика и четвертого сборщика? Приветствуются любые советы или указания по соответствующим руководствам и т. Д. … с новым годом, Бретт.

Ответ №1:

Привет, БреттР, и добро пожаловать в наше сообщество! Давайте проясним для вас некоторые вещи.

  1. Вы создали один инструмент выбора с 4 компонентами.
  2. Компоненты в picker — это разные столбцы, которые вы видите, и пользователь может прокручивать по вертикали, чтобы выбрать один из доступных вариантов.
  3. Чтобы определить, какой из ваших компонентов был обновлен, вы должны использовать параметр компонента метода делегирования func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)

Итак, ваш код должен выглядеть так:

 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        print("row: (row) of: ")
        switch component {
        case 0:
            print("first component")
        case 1:
            print("second component")
        case 2:
            print("third component")
        case 3:
            print("fourht component")
        default:
            print("unhandling compoment")
        }
        print("selectedn")
    }
 

Я также предлагаю вам потратить некоторое время на чтение / чтение этого руководства https://codewithchris.com/uipickerview-example / чрезвычайно полезен и по существу.

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

1. Привет, кстефану … спасибо. Я внес изменения и ознакомлюсь с руководством. Ценю время, которое вы потратили на ответы… надеюсь, ваш новый год был приятным и безопасным!

2. Спасибо BrettR за пожелания, желаю вам всего наилучшего. Пожалуйста, отметьте мой ответ принятым, чтобы помочь большему количеству людей найти правильный ответ на тот же вопрос, что и вы. Удачи 🤘