2015-05-14 14 views
8

Tôi là người mới bắt đầu hoàn chỉnh trên iOS dev và tôi muốn tạo một ứng dụng iOS nhỏ. Trên ứng dụng này, 3 UIPickerViews được cho là hiển thị dữ liệu khác nhau.Nhiều UIPickerView trong cùng một UIView

Sự cố của tôi xuất hiện trên màn hình. Tôi đang sử dụng để dev trên Android hoặc Windows điện thoại và tôi không hiểu làm thế nào để cư các UIPickerViews với dữ liệu khác nhau.

Đây là mã tôi đã viết:

// 
// ViewController.swift 
// iphoneVersion 
// 
// Created by fselva on 13/05/2015. 
// Copyright (c) 2015 fselva. All rights reserved. 
// 

import UIKit 



class ViewController: UIViewController, UIPickerViewDelegate{ 



@IBOutlet weak var pickerView1: UIPickerView! 
@IBOutlet weak var pickerView2: UIPickerView! 
@IBOutlet weak var pickerView3: UIPickerView! 

var test = ["Todo","Waiting","Maybe","Inbox","Note"] 

var test2 = ["@Office","@Computer","@Home","@Meeting", "@Read", "@Achat", "@Call"] 



override func viewDidLoad() { 
    super.viewDidLoad() 
    pickerView1.tag = 1 
    pickerView2.tag = 2 
    pickerView3.tag = 3 
    // 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. 
} 

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

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{ 
    if pickerView2.tag == 2 { 
     return test.count 
    } else if pickerView3 == 3{ 
     return test2.count 
    } 
    return 1 
} 

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { 

    if pickerView2 == 2 { 
     return test[row] 
    } else if pickerView3 == 3{ 
     return test2[row] 
    } 
     return "" 
} 


} 

@IBOutlet weak var pickerView1: UIPickerView! đã được tự động tạo ra bởi tổ hợp phím Ctrl + Click từ kịch bản đến ViewController.swift.

UIPickerView đầu tiên hiện không được hiển thị. Màn hình thứ hai được hiển thị test và màn hình thứ ba hiển thị test2.

Sau nhiều giờ điều tra trên internet, tôi đã nghe nói về thẻ để xác định ai phải hiển thị những gì, nhưng nó không hoạt động.

Tôi có làm gì sai không, tôi có thiếu gì đó ở đâu đó không?

Trả lời

33

Bạn không cần thẻ, chỉ cần sử dụng:

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{ 
     if pickerView == pickerView1 { 
      //pickerView1 
     } else if pickerView == pickerView2{ 
      //pickerView2 
     } 

cũng đừng quên để thiết lập đại biểu trong IB hoặc trong mã:

pickerView1.delegate = self 
+0

Cảm ơn bạn đã trả lời của bạn, Tôi sẽ kiểm tra những gì đại biểu là để hiểu những gì bạn nói với tôi. Hơn nữa tôi sẽ thử giải pháp bạn nói, cảm ơn. – fselva

+0

đặt pickerView1.delegate = self in viewDidLoad() – ChikabuZ

+0

Ok nó hoạt động giống như một sự quyến rũ, tôi chỉ bỏ lỡ các đại biểu ..... Cảm ơn rất nhiều! – fselva

0

Bạn đang so sánh trường hợp với thẻ.

Thay thế:

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { 
    if pickerView2 == 2 { 
     return test[row] 
    } else if pickerView3 == 3{ 
     return test2[row] 
    } 
     return "" 
} 

với:

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { 
    if pickerView2.tag == 2 { 
     return test[row] 
    } else if pickerView3.tag == 3 { 
     return test2[row] 
    } 
     return "" 
} 

Dù sao, bạn không cần gắn thẻ hái của bạn. Bộ chọn có trong phương thức nguồn cấp dữ liệu và ủy quyền. Bạn có thể so sánh các trường hợp. Một cái gì đó như thế này:

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { 
    if pickerView2 == pickerView { 
     return test[row] 
    } 
    if pickerView3 == pickerView { 
     return test2[row] 
    } 
    return "" 
} 
+0

cảm ơn bạn đã trả lời. Những gì bị mất là đại biểu. Tôi đã thử điều này một vài giờ trước và nó đã không làm việc vì tôi đã không làm pickerViewX.delegate = tự. Giải pháp của bạn hoạt động tốt. – fselva

-1

Hãy thử điều này:

enter image description here

class UserConfig: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 

    @IBOutlet weak var lblPeso: UILabel! 
    @IBOutlet weak var lblAlto: UILabel! 
    @IBOutlet weak var pickerView: UIPickerView! 
    @IBOutlet weak var btPeso: UIButton! 
    @IBOutlet weak var btAlto: UIButton! 

    var pulsado = 1 

    let userDefault = UserDefaults.standard 
    let pesoArray = [50,51,52,53,54,55,56,57,58,59, 
        60,61,62,63,64,65,66,67,68,69, 
        70,71,72,73,74,75,76,77,78,79, 
        80,81,82,83,84,85,86,87,88,89, 
        90,91,92,93,94,95,96,97,98,99, 
        100,101,102,103,104,105,106,107,108,109, 
        110,111,112,113,114,115,116,117,118,119, 
        120,121,122,123,124,125,126,127,128,120, 
        130] 
    let altoArray = [150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 
        160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 
        170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 
        180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 
        190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 
        200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 
        210, 211, 212] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     pickerView.delegate = self 
     pickerView.dataSource = self 
    } 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     self.view.endEditing(true) 
    } 
    @IBAction func volver(_ sender: Any) { 

     self.dismiss(animated: true, completion: nil) 
    } 

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     if pulsado == 1 { 
      return altoArray.count 
     } else { 
      return pesoArray.count 
     } 
    } 

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

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 

     if pulsado == 1{ 
      return String(format: "%i", altoArray[row]) 
     }else{ 
      return String(format: "%i", pesoArray[row]) 
     } 
    } 

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     if pulsado == 1 { 
      lblAlto.text = String(format: "%i", altoArray[row]) 
     } else { 
      lblPeso.text = String(format: "%i", pesoArray[row]) 
     } 
    } 
    @IBAction func altoPressed(_ sender: Any) { 

     pulsado = 1 
     pickerView.reloadAllComponents() 

    } 
    @IBAction func pesoPressed(_ sender: Any) { 

     pulsado = 2 
     pickerView.reloadAllComponents() 

    } 
} 
0

Đây là Full Source Nhiều UIPickerView trong TextField trong Swift 3

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 

@IBOutlet weak var textFiel1: UITextField! 

@IBOutlet weak var textFiel_2: UITextField! 


let piker1 = UIPickerView() 
let piker2 = UIPickerView() 

let country = ["Ban","Ind","PK"] 
let number = ["1","2","3"] 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    piker1.dataSource = self 
    piker1.delegate = self 

    piker2.dataSource = self 
    piker2.delegate = self 


    piker1.tag = 1 
    piker2.tag = 2; 



    textFiel1.inputView = piker1 
     textFiel_2.inputView = piker2 


} 

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

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



func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 



    if pickerView == piker1 { 
     return country.count 

    } else if pickerView == piker2{ 
     return number.count 
    } 

    return 1 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 


    if pickerView == piker1 { 
     return country[row] 

    } else if pickerView == piker2{ 
     return number[row] 
    } 
    return "" 
} 

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    if pickerView == piker1 { 
     textFiel1.text = country[row] 
      self.view.endEditing(false) 
    } else if pickerView == piker2{ 
     textFiel_2.text = number[row] 
      self.view.endEditing(false) 
    } 
} 

} 
Các vấn đề liên quan