2017-09-09 8 views
-1

* Ich möchte jedes Mal neue Zeilen einfügen, wenn die Schaltfläche Hinzufügen gedrückt wird (Bedingung: eine gültige E-Mail-Adresse eingegeben wird). Hier enter image description here ist mein Code:So erstellen Sie neue Zellen, wenn die Schaltfläche in der Zelle in der Tabellenansicht gedrückt wird

import UIKit 
var totalCells=0 
class AddEmailTableCell: UITableViewCell,UITextFieldDelegate { 

    var obj:UIViewController=ViewController() 
    @IBOutlet weak var textField: UITextField! 
    @IBOutlet weak var addButton: UIButton! 
    @IBOutlet weak var addEmailLabel: UILabel! 
    @IBOutlet weak var addEmailImg: UIImageView! 


    func isValidEmail(testStr:String) -> Bool { 
     // print("validate calendar: \(testStr)") 
     let emailRegEx = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,}" 

     let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx) 
     return emailTest.evaluate(with: testStr) 
    } 
    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 
     addButton.isHidden=true 
     self.textField.delegate=self 
    } 


    @IBAction func addEmailButton(_ sender: Any) { 
     if(textField.text == nil || (textField.text?.isEmpty)!) { 

      print("email not filled") 
      return 
     } 
     if (isValidEmail(testStr: textField.text!)==false){ 
      print("email not valid") 
      return 
     } 
      totalCells=totalCells+1 
     let index=IndexPath(row: totalCells, section: 0) 
      (obj as! ViewController).tableView.insertRows(at: [index], with: UITableViewRowAnimation.automatic) 
      print(totalCells) 
      print("valid") 

    } 
} 

Mein Viewcontroller Code hier gegeben:

import UIKit 
class ViewController: 
    UIViewController,UITableViewDelegate,UITableViewDataSource { 
@IBOutlet weak var tableView: UITableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // 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 numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if totalCells==0{ 
     return 1 
    } 
    return totalCells 
} 
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell=tableView.dequeueReusableCell(withIdentifier: "addEmail", for: indexPath) as! AddEmailTableCell 

    return cell 

} 
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    return 60 
    } 
} 

so was soll ich hier tun, ich rufe tableview.reloadData und vorbei aktualisierte Anzahl von Zellen zu meinem Tabellenansicht, aber es funktioniert nicht.

+0

Sie benötigen ein ** Modell ** (ein Datenquellenarray) in 'ViewController' und Sie sollten die * Controller * bezogene Logik von der ** Ansicht ** (der Zelle) auf den ** Controller ** verschieben. – vadian

Antwort

0

Sie sollten isValidEmail() verschieben undEmailButton() zu Ihrem ViewController hinzufügen und Tabellenansicht in diesem Controller steuern.

Verwandte Themen