2014-12-07 11 views
0

신속한 픽커와 관련하여 질문이 있습니다. IOS에서 프로그래밍을 시작했고 Objective-C에 대한 사전 경험이 없었습니다. 우리는 프로젝트 (그리고 총 소유 비용)를 계산해야하고 현재 피커에서 정보를 얻으려고합니다.스위프트에서 픽커 연결하기

문제점 : 다중 배열을 만들고 var 세그먼트이 첫 번째 선택 도구에 있습니다. 그러나 첫 번째 인덱스 "A"를 선택하면 배열 carA가 표시되어야하고 세그먼트 B를 선택하면 carB Array가 표시되어야합니다.

이것은 지금까지 제 코드입니다!. 나는 누군가가 나를 도울 수 있기를 바랍니다 :).

import UIKit 
class ViewController: UIViewController, UIPickerViewDelegate { 
    var segment = ["A","B","C","D","E"] 
    var kilometers = ["24000","36000","48000"] 
    var looptijd = ["2 jaar","3 jaar","5 jaar"] 
    var carA = ["Toyota Aygo","Suzuki Swift"] 
    var carB = ["Prius","Peugeot 207"] 
    var carC = ["Lexus ch270","audi a3"] 
    var carD = ["Lexus..","BMW X6"] 
    @IBOutlet weak var segmentLabel: UILabel! 
    @IBOutlet weak var kilometersLabel: UILabel! 
    @IBOutlet weak var looptijdLabel: UILabel! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     segmentLabel.text = segment[0] 
     kilometersLabel.text = kilometers[0] 
     looptijdLabel.text = looptijd[0] 
    } 
    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 
     return 4 
    } 
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     if (component == 0) { 
      return segment.count 
     } else { 
      if(component == 1) { 
       return kilometers.count 
      } 
      if(component == 2) { 
       return looptijd.count 
      } 
      if(component == 3) { 
       return carA.count 
      } 
     } 
     return component 
    } 
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { 
     if (component == 0) { 
      return segment[row] 
     } else { 
      if(component == 1) { 
       return kilometers[row] 
      } 
      if(component == 2) { 
       return looptijd[row] 
      } 
      if(component == 3){ 
       return carA[row] 
      } 
      return nil  // ARE YOU SURE RETURN IT IS NO AFTER CURLY BRACKETS ? 
     }     // THATS WHY YOU SHOULD BETTER INDENT YOUR CODE 
    } 
    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     if(component == 0){ 
      var segmentSelected = segment[row] 
      segmentLabel.text = segmentSelected 
     } else { 
      if(component == 1) { 
       var kilometersSelected = kilometers[row] 
       kilometersLabel.text = kilometersSelected 
      } 
      if(component == 2){ 
       var looptijdSelected = looptijd[row] 
       looptijdLabel.text = looptijdSelected 
      } 
     } 
    } 
} 
+0

여기서 계산해야 할 사항은 무엇입니까? –

+0

UIPickerView 외부에 UISegmentedControl이 있고 A, B, C, D를 선택하면 올바른 배열로 pickerView가 다시로드됩니다. – Caroline

+0

'switch' 문을 살펴 보는 것이 좋습니다. – akashivskyy

답변

1

여기에 문자열 배열을 하나 더 만들어야합니다. 이 배열은 선택한 첫 번째 구성 요소가 변경 될 때 선택 영역을 유지 한 다음 구성 요소를 다시로드 할 수 있습니다.

먼저 CarA이어야합니다. 따라서 해당 배열의 기본 선택 항목은 첫 번째 배열이되고 구성 요소 0 행 값이 변경되면이 배열 값을 변경합니다.

pickerView(_:didSelectRow:InComponent:) 메서드에서 선택 배열 값을 재 할당해야합니다. 그런 다음 다시로드 한 후 모든 선택기 구성 요소가 트릭을 수행합니다.

아래 코드는 테스트 해 보았습니다. 로직을 다시 구현했지만 아직 작동하지 않는다면 데모를 제공 할 것입니다.

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 

    @IBOutlet weak var picker: UIPickerView! 

    var segment: [String]! 
    var kilometers: [String]! 
    var looptijd: [String]! 
    var carA:  [String]! 
    var carB:  [String]! 
    var carC:  [String]! 
    var carD:  [String]! 

    var selectionArray:  [String]! 

    @IBOutlet weak var segmentLabel: UILabel! 
    @IBOutlet weak var kilometersLabel: UILabel! 
    @IBOutlet weak var looptijdLabel: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     segment = ["A","B","C","D","E"] 
     kilometers = ["24000","36000","48000"] 
     looptijd = ["2 jaar","3 jaar","5 jaar"] 
     carA = ["Toyota Aygo","Suzuki Swift"] 
     carB = ["Prius","Peugeot 207"] 
     carC = ["Lexus ch270","audi a3"] 
     carD = ["Lexus..","BMW X6"] 

     selectionArray = carA 
     segmentLabel.text = segment[0] 
     kilometersLabel.text = kilometers[0] 
     looptijdLabel.text = looptijd[0] 

     picker.delegate = self 
     picker.dataSource = self 

    } 

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


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

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     if (component == 0) { 
      return segment.count 
     } else { 
      if(component == 1) { 
       return kilometers.count 
      } 
      if(component == 2) { 
       return looptijd.count 
      } 
      if(component == 3) { 
       return carA.count 
      } 
     } 
     return component 
    } 

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { 
     if (component == 0) { 
      return segment[row] 
     } else { 
      if(component == 1) { 
       return kilometers[row] 
      } 
      if(component == 2) { 
       return looptijd[row] 
      } 
      if(component == 3){ 
       return selectionArray[row] 
      } 
      return nil  // ARE YOU SURE RETURN IT IS NO AFTER CURLY BRACKETS ? 
     }     // THATS WHY YOU SHOULD BETTER INDENT YOUR CODE 
    } 

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     if (component == 0) { 
      var selectedString = segment[row]; 
      segmentLabel.text = selectedString 

      if (selectedString == segment[0]) { 
       selectionArray = carA 
      } else if (selectedString == segment[1]) { 
       selectionArray = carB 
      } else if (selectedString == segment[2]) { 
       selectionArray = carC 
      } else if (selectedString == segment[3]) { 
       selectionArray = carD 
      } 
      picker.reloadAllComponents() 
     } else { 
      if(component == 1) { 
       var kilometersSelected = kilometers[row] 
       kilometersLabel.text = kilometersSelected 
      } 
      if(component == 2){ 
       var looptijdSelected = looptijd[row] 
       looptijdLabel.text = looptijdSelected 
      } 
     } 
    } 

    deinit { 
     self.picker.delegate = nil 
     self.picker.dataSource = nil 
    } 
}