2017-07-20 10 views
-1

1つのビュー・コントローラーに2つのピック・ビューを配置しようとしています。私はそれらのために異なるタグを設定しようとしました。しかし、どちらのビューにも「選択肢」の配列があります。私は両方をコントロールしてドラッグし、データソースとデリゲートに設定しました。私はまた、以下のコードを試しました。前もって感謝します。Swift 3の同じコントローラーに2つのピック・ビューを配置する方法

import Foundation 
import UIKit 

class SecondViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 
    var model = Model() 
    @IBOutlet weak var hoursTakenText: UITextField! 
    @IBOutlet weak var PickerView2: UIPickerView! 
    @IBOutlet weak var pickerView1: UIPickerView! 
    let choices2 = ["0","0.7","1.0"] 
    let choices: [String] = (1...90).map { String($0)} 
    @IBAction func hoursTaken(_ sender: Any) { 
     subView.isHidden = false 
    } 
    @IBOutlet weak var subView: UIView! 
    func numberOfComponents(in pickerView: UIPickerView) -> Int { 
     return 1 
    } 
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     if pickerView == pickerView1 { 
      return choices[row]} 
     else { 
      return choices2[row] 
     } 
    } 

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     if pickerView == pickerView1 { 
      return choices.count} 
     else{ 
      return choices2.count 
     } 
    } 
    //choices[row]: [String] = (1...10).map { "Option " + String(format: "%2d", $0)} 
    func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { 
     let label = (view as? UILabel) ?? UILabel() 
     label.font = UIFont(name: "Verdana", size: 15) 
     //label.textColor = .blue 
     label.textAlignment = .center 
     //label.font = UIFont.systemFont(ofSize: 20) 
     label.text = choices[row] 
     return label 
    } 
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     let hourstaken = Double(choices[row]) 
     print(hourstaken!) 
     var stuDent: Student 
     if pickerView == pickerView1 { 
      print(choices[row]) 
      stuDent = Student(hoursTaken: hourstaken!) 
      model.student.append(stuDent) 
     } 
     subView.isHidden = true 
     hoursTakenText.text = choices[row] 
     print("hello") 
    } 
    override func viewDidLoad() { 
     //pickerViewBack.isHidden = true 
     super.viewDidLoad()   
     subView.isHidden = true 
    } 
} 

答えて

0

あなたはnumberOfRowsInComponentの実装ではなく、viewForRowの実装に2つのピッカービューの間で選択されています。 viewForRowは常にchoices[row]を参照し、そのラベルのテキストを設定します。したがって、両方のピッカービューにchoicesが表示されます。

0

viewForRowの行を設定するUIPickerViewをチェックしていないため、両方のデータを同じに設定しています。

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { 
    let label = (view as? UILabel) ?? UILabel() 
    label.font = UIFont(name: "Verdana", size: 15) 
    label.textAlignment = .center 
    if pickerView == pickerView1 { 
     label.text = choices[row] 
    } else { 
     label.text = choices2[row] 
    } 

    return label 
} 
0

あなたは

var pickerTags: Int = -1 

func pickersCon(){ 
self.pickerView1.tag = 1 
self.pickerView1.delegate = self 
self.pickerView2.tag = 2 
self.pickerView2.delegate = self 
} 

そして、あなたのpickerViewの方法で使用すると、たとえば

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    if pickerView.tag == 1 { 
     return choices[row]} 
    else if pickerView.tag == 2 { 
     return choices2[row] 
    } 
} 
+0

を以下 を行うことができますが動作し、それを手に入れたことを行うためにタグを使用することができます!本当にありがとう! – jean

+0

@jeanもし正しい解決策があれば、アップしてください – Cloy

関連する問題