2016-06-05 4 views
0

Ich möchte UITextFiled.text in benutzerdefinierten UITableViewCell aktualisiert werden, wenn ich einen Wert aus UIPickerView auswählen.Wie update textfield.text Wert in benutzerdefinierten TableViewCell von UIPickerView

Wenn Sie auf das Bild schauen, tippen Sie auf UITextField in benutzerdefinierten UITableViewCell und UIPickerView erscheint. Dann wähle ich Nummer und Tab "Fertig". Aber ich weiß nicht, wie man den ausgewählten Wert von UIPickerView an mein benutzerdefiniertes UITableViewCell übergibt, wo ist mein UITextFiled.text.

Kann mir jemand helfen, bitte? Dank

The screenshot

Individuelle Handy

class JamkaTableViewCell: UITableViewCell, pickerChangedDelegate { 

    @IBOutlet weak var jmenoHraceLabel: UILabel! 
    @IBOutlet weak var parTextField: UITextField! 

    func onPickerChanged(val: String) { 
     self.parTextField.text = val 
     print(self.parTextField.text) 
    } 
} 

View Controller

import UIKit 

protocol pickerChangedDelegate { 
    func onPickerChanged(val: String) 
} 

class JamkaViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate { 


    @IBOutlet weak var vzdalenostLabel: UILabel! 
    @IBOutlet weak var jmenoLabel: UILabel! 
    @IBOutlet weak var parJamkyLabel: UILabel! 
    @IBOutlet weak var tableView: UITableView! 
    @IBOutlet weak var scrollView: UIScrollView! 
    @IBOutlet weak var jamkaView: UIView! 

    var picker: UIPickerView! 
    var karta:Karta = Karta.init() 
    var index = 0 
    var vzdalenost:Int! 
    var jmenoJamky:String = "" 
    var parJamky:Int! 
    var pocetKopu:[String] = [] 
    var hrac:Hrac! 
    var delegate: pickerChangedDelegate? = nil 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     vzdalenostLabel.text = "\(self.vzdalenost)" 
     jmenoLabel.text = self.jmenoJamky 
     parJamkyLabel.text = "\(self.parJamky)" 

     //Vypocitat pocet kopu a trestných bodů 
     pocetKopu(self.parJamky) 

     //Jamka view 
     self.jamkaView.layer.cornerRadius = 5 

    } 

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

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return self.karta.seznamHracu.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cellIdentifier = "Cell" 
     let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! JamkaTableViewCell 

      self.hrac = self.karta.seznamHracu[indexPath.row] 

      //Vybiratko na pary 
      self.picker = UIPickerView.init() 
      self.picker.delegate = self 
      self.picker.dataSource = self 
      self.picker.backgroundColor = svetleSeda 

      let pickerToolbar = UIToolbar() 
      pickerToolbar.barStyle = .Default 
      pickerToolbar.sizeToFit() 
      pickerToolbar.tintColor = UIColor.blackColor() 

      let hotovoTlacitko = UIBarButtonItem(barButtonSystemItem: .Done, target: self, action: #selector(JamkaViewController.skrytPickerView)) 

      pickerToolbar.setItems([hotovoTlacitko], animated: true) 
      pickerToolbar.userInteractionEnabled = true 

      cell.parTextField.inputView = self.picker 
      cell.parTextField.inputAccessoryView = pickerToolbar 
      cell.jmenoHraceLabel.text = self.hrac.jmeno 

      print(cell.parTextField.text) 

     return cell 

    } 

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

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     return self.pocetKopu.count 
    } 

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     return self.pocetKopu[row] 
    } 

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     delegate?.onPickerChanged(self.pocetKopu[row]) 
     print("did select \(self.pocetKopu[row])") 
    } 

    func pocetKopu(parJamky: Int) -> [String] { 

     let maximalniPocetKopu = (3*parJamky) 

     for i in 1...maximalniPocetKopu { 

      let str = String(i) 
      self.pocetKopu.append(str) 

     } 

     //Trestne body 
     let trestneBody = String(4*parJamky) 
     self.pocetKopu.append(trestneBody) 

     return self.pocetKopu 

    } 

    func textFieldShouldBeginEditing(textField: UITextField) -> Bool { 
     let pointInTable:CGPoint = textField.superview!.convertPoint(textField.frame.origin, toView:self.tableView) 
     var contentOffset:CGPoint = self.tableView.contentOffset 
     contentOffset.y = pointInTable.y 
     if let accessoryView = textField.inputAccessoryView { 
      contentOffset.y -= accessoryView.frame.size.height 
     } 
     self.tableView.contentOffset = contentOffset 
     return true; 
    } 

    func textFieldDidEndEditing(textField: UITextField) { 
     self.tableView.setContentOffset(CGPointMake(0, 0), animated: true) 
     scrollView.setContentOffset(CGPointMake(0, 0), animated: true) 
    } 

    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     textField.resignFirstResponder() 
     return true 
    } 

    func skrytPickerView() ->() { 
     self.view.endEditing(true) 
    } 

} 

Antwort

1

Sie müssen didSelectRow von picker wie folgt umzusetzen:

//create delegate in controller that contains picker 
protocol pickerChangedDelegate{ 
    func onPickerChanged(val: String) 
} 


class vc: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate{ 
    @IBOutlet var picker: UIPickerView! 

    //your view controller .... 
    //.... 


    var delegate: pickerChangedDelegate? = nil 
    var items = ["1", "2", "3"] 

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     return items.count 
    } 

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

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     //this will send picker value through protocol to your cell 
     delegate?.onPickerChanged(items[row]) 
    } 
} 



//use delegate where you want data 
class customCell: UITableViewCell, pickerChangedDelegate{ 
    @IBOutlet weak var myText: UITextField! 

    //Cell setup 
    //.... 
    //.... 


    func onPickerChanged(val: String) { 
     myText.text = val 
    } 
} 
+0

Dank für die Beratung. Ich benutze benutzerdefinierte Zelle, aber ich bin ein Anfänger und ich verstehe nicht, "Sie können dies in der Zelle selbst und senden Daten mit einem Protokoll, um Controller von Ypur Tabelle anzeigen" können Sie mir bitte jeden Code, wie kann ich erreichen oder es mehr erklären? Vielen Dank –

+0

@ MiroslavPurtík Ich aktualisiere den Code und wie Sie das Protokoll verwenden können, um Ihre Daten in Ihre Zelle zu bekommen. –

+0

danke für die Antwort Ich habe alles nach Ihrem Code, aber delegieren? .onPickerChanged (self.pocetKopu [row]) wird nie ausführen :(Überprüfen Sie meinen Code oben bitte. Vielen Dank –

0
class vContoller: UIViewController , UITextFieldDelegate , UIPickerViewDataSource , UIPickerViewDelegate { 


@IBOutlet var accountNo: UITextField! 

var accountNoArray: [String] = [String]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

accountNoArray = ["1","2"] 
self.accountNo.delegate = self 
} 




func pickerCode(text: UITextField){ 



    let picker: UIPickerView 
    picker = UIPickerView(frame: CGRectMake(0, 200, view.frame.width, 300)) 
    picker.backgroundColor = .whiteColor() 
    picker.showsSelectionIndicator = true 
    picker.delegate = self 
    picker.dataSource = self 

    let toolBar = UIToolbar() 
    toolBar.barStyle = UIBarStyle.Default 
    toolBar.translucent = true 
    toolBar.sizeToFit() 

    let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "donePicker") 
    let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) 
    let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: "canclePicker") 

    toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false) 
    toolBar.userInteractionEnabled = true 

    if text.tag == 2 
    { 
     self.tagMaster = 2 
     accountNo.inputAccessoryView = toolBar 
     accountNo.inputView = picker 
     //accountNo.text = " " + accountNoArray[0] 
    } 
} 

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int{ 

    return 1 

} 

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{ 
    var count: Int = 0 
    if self.tagMaster == 2 
    {//accountNo 
     count = accountNoArray.count 
    } 
    return count 
} 

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    var stro:String = "" 
    if self.tagMaster == 2 
    {//accountNo 
     stro = accountNoArray[row] 
    } 
    return stro 

} 

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 

    if self.tagMaster == 2 
    {//accountNo 
     accountNo.text = " " + accountNoArray[row] 


    } 
} 

func donePicker(){ 

    accountNo.resignFirstResponder() 
    if self.tagMaster == 2 
    { 
     accountNo.resignFirstResponder() 

    } 
} 

func canclePicker(){ 

    if self.tagMaster == 2 
    { 
     accountNo.resignFirstResponder() 

     accountNo.text = " " + accountNoArray[selectedRowForAccNoAndLbrCode] 
    } 

} 


func textFieldDidEndEditing(textField: UITextField) { 

    pickerCode(textField) 
} 

func textFieldDidBeginEditing(textField: UITextField) { 

    pickerCode(textField) 
} 

//////////////////////////////////////////////////////////////////////////////////// 
//////////////////////////////////////////////////////////////////////////////////// 
//////////////////////////////////////////////////////////////////////////////////// 
+0

Vielen Dank Ich werde versuchen, Sie wissen zu lassen :) –