2016-12-29 3 views
0

Ich habe eine UITableView und innerhalb von UITableViewCell gibt es 5 TextFields. Ich muss UITextFieldDelegate zuweisen und Grenzlinie auf TextField erstellen. Ich rufe meine Funktion createBorderLine von cellForRowAtIndexPath auf, aber es wirft einen Fehler auf (schwerwiegender Fehler: unerwartet gefundene Null beim Entpacken eines optionalen Werts).Wie erhalten Sie eine Grenzlinie für textField von cellForRowAtIndexPath?

Unten ist mein Code:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let identifier = "EditProductCell" 

     var editProductCell = tableView.dequeueReusableCell(withIdentifier: identifier) as? EditProductCell 
     if(editProductCell == nil) 
     { 
      let nib:Array = Bundle.main.loadNibNamed("EditProductCell", owner: self, options: nil)! 
      editProductCell = nib[0] as? EditProductCell 

      //Call Create Border Line function. 
      self.createBorderLine() 
     } 
} 

Und hier ist meine createBorderLine Funktion:

func createBorderLine() 
{ 
    let index : NSIndexPath = NSIndexPath(row: 0, section: 0) 
    let tCell : EditProductCell = self.tableView.cellForRow(at: index as IndexPath) as! EditProductCell 

    tCell.InvoiceDate.delegate = self 
    tCell.InvoiceNumber.delegate = self 
    tCell.modelNumber.delegate = self 
    tCell.productName.delegate = self 
    tCell.serialNumber.delegate = self 
    tCell.viewWarrentyDate.isHidden = true 


    setBottomBorder(textField: tCell.InvoiceDate, width: 0.8,color : UIColor.lightGray) 
    setBottomBorder(textField: tCell.InvoiceNumber, width: 0.8,color : UIColor.lightGray) 
    setBottomBorder(textField: tCell.modelNumber, width: 0.8,color : UIColor.lightGray) 
    setBottomBorder(textField: tCell.productName, width: 0.4,color : UIColor.lightGray) 
    setBottomBorder(textField: tCell.serialNumber, width: 0.4,color : UIColor.lightGray) 
} 

Was kann ich tun? Warum gibt es einen Fehler?

+0

Warum erstellen Sie 'let index: NSIndexPath = NSIndexPath (row: 0, section: 0)'? Sie können das Zellobjekt einfach an createBorderLine übergeben –

+0

OK Eigentlich bin ich in TableViewConcepts etwas verwirrt. Grundlagen, die ich kenne. Wie auch immer, danke. – kishor0011

Antwort

2

Warum erstellen Sie den Indexpfad für Zeile 0 und Abschnitt 0 jedes Mal in createBorderLine. Übergeben Sie einfach die Zellref in createBorderLine

self.createBorderLine(editProductCell) 

und in createBorderLine Funktion

func createBorderLine(tCell: EditProductCell) 
{ 

tCell.InvoiceDate.delegate = self 
tCell.InvoiceNumber.delegate = self 
tCell.modelNumber.delegate = self 
tCell.productName.delegate = self 
tCell.serialNumber.delegate = self 
tCell.viewWarrentyDate.isHidden = true 


setBottomBorder(textField: tCell.InvoiceDate, width: 0.8,color : UIColor.lightGray) 
setBottomBorder(textField: tCell.InvoiceNumber, width: 0.8,color : UIColor.lightGray) 
setBottomBorder(textField: tCell.modelNumber, width: 0.8,color : UIColor.lightGray) 
setBottomBorder(textField: tCell.productName, width: 0.4,color : UIColor.lightGray) 
setBottomBorder(textField: tCell.serialNumber, width: 0.4,color : UIColor.lightGray) 

} 

Statt createBorderLine in Controller-Klasse zu schaffen Sie createBorderLine in EditProductCell Klasse setzen sollte. und rufen Sie direkt über EditProductCell Objekt ref.

+0

Ja, ich habe versucht, dies und es funktioniert. Gibt es auch anders? – kishor0011

+0

Ich empfehle Ihnen, createBorderLine in EditProductCell-Klasse zu setzen. Sie können also über die Methode "EditProductCell ref" in der Methode "cellForRowAt indexPath" direkt auf createBorderLine zugreifen. – Sahil

+0

Sie haben Recht. Ich dachte das selbe. Aber ich habe Grenzlinienfarbe ändern, wenn Sie auf ein TextField tippen und auch auf eine Schaltfläche klicken. danke – kishor0011

Verwandte Themen