2016-12-01 2 views
0

이것은 내가 두 번째 UIPickerView을 확인 enter image description here만들기 UIPickerView (스위프트)

을 달성하고자하는 뭔가가 현재 선택한 행에 따라 enter image description here

+1

첫 번째 선택 도구를 선택하면 두 번째 선택 도구의 데이터 소스를 변경하고 해당 구성 요소를 다시로드하십시오. – Himanshu

답변

0

확인하시기 바랍니다 UIPickerViewDelegate 및 UIPickerViewDataSource : https://developer.apple.com/reference/uikit/uipickerviewdelegate https://developer.apple.com/reference/uikit/uipickerviewdatasource

아이디어 :

  1. 선택자 행 picker1을 기반으로 picker2의 데이터를 구성합니다.

  2. 사용자는 picker1에서 행

코드 아래 picker2의 데이터를 다시 선택 될 때마다 :

class ViewController: UIViewController { 

    @IBOutlet weak var picker1: UIPickerView! 
    @IBOutlet weak var picker2: UIPickerView! 

    let picker1Options = ["TV", "RADIO"] 
    let picker2TVOptions = ["ABC", "SBS"] 
    let picker2RadioOptions = ["TripleJ", "107.0", "CBS"] 

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

     self.picker2.dataSource = self 
     self.picker2.delegate = self 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

그리고

extension ViewController: UIPickerViewDataSource, UIPickerViewDelegate 
{ 
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     if pickerView == self.picker1 { 
      return picker1Options.count 
     } else if picker1.selectedRow(inComponent: 0) == 0 { 
      return picker2TVOptions.count 
     } 
     else if picker1.selectedRow(inComponent: 0) == 1 { 
      return picker2RadioOptions.count 
     } 
     return 0 
    } 
    func numberOfComponents(in pickerView: UIPickerView) -> Int { 
     return 1 
    } 
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     if pickerView == picker1 { 
      return picker1Options[row] 
     } else if picker1.selectedRow(inComponent: 0) == 0 { 
      return picker2TVOptions[row] 
     } 
     else if picker1.selectedRow(inComponent: 0) == 1 { 
      return picker2RadioOptions[row] 
     } 
     return nil 
    } 
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     if pickerView == picker1 { 
      picker2.reloadAllComponents() 
     } 
    } 
} 
1

1.set 데이터 소스 또는 스토리 보드의 대표자

2. 스토리 보드의 PickerOne의 세트 태그 101.

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 

@IBOutlet weak var pickerTwo: UIPickerView! 

let pickerOneOptions = ["TV", "RADIO"] 
let pickerTwoTVOptions = ["ABC", "SBS"] 
let pickerTwoRadioOptions = ["TripleJ", "107.0", "CBS"] 
var pickerOneSelectedRow:Int = 0 

override func viewDidLoad() { 
    super.viewDidLoad() 
} 

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 
return 1 
} 

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
if pickerView.tag == 101 { //pickerOne 
    return pickerOneOptions.count 
} else { //pickerTwo 
    if self.pickerOneSelectedRow == 0 { 
    return pickerTwoTVOptions.count 
    } else { 
    return pickerTwoRadioOptions.count 
    } 
} 
} 

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
if pickerView.tag == 101 { //pickerOne 
    return pickerOneOptions[row] 
} else { //pickerTwo 
    if self.pickerOneSelectedRow == 0 { 
    return pickerTwoTVOptions[row] 
    } else { 
    return pickerTwoRadioOptions[row] 
    } 
} 
return nil 
} 

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
if pickerView.tag == 101 { 
    self.pickerOneSelectedRow = row 
    pickerTwo.reloadAllComponents() 
    } 
} 
}