在表格视图中按下单元格上的按钮时如何创建新单元格

Posted

技术标签:

【中文标题】在表格视图中按下单元格上的按钮时如何创建新单元格【英文标题】:How to create new cells when button on cell is pressed in tableview 【发布时间】:2017-09-09 16:12:26 【问题描述】:

*我想在每次按下添加按钮时插入新行(条件:输入有效的电子邮件地址)。 enter image description here 这是我的代码:

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._%+-]+@[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")

    

这里给出了我的 viewController 代码:

 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
     
 

所以我应该在这里做什么,我正在调用 tableview.reloadData 并将更新的单元格数量传递给我的 tableview,但它不起作用。

【问题讨论】:

你需要一个ViewController中的model(一个数据源数组)并且你应该从view中移动controller相关的逻辑(单元格)到控制器 【参考方案1】:

您应该将 isValidEmail() 和 addEmailButton() 移动到您的 ViewController 并在此控制器中控制 tableview。

【讨论】:

以上是关于在表格视图中按下单元格上的按钮时如何创建新单元格的主要内容,如果未能解决你的问题,请参考以下文章

如何使表格视图单元格上的按钮调用正确的 tableView:cellForRowAtIndexPath?

swift 3 在tableView 中按下了哪个单元格按钮

自定义表格视图单元格上的多个图像(Swift)

iOS - 如何查看表格视图单元格上的“滑动删除”操作?

如何通过在自定义视图中按下按钮从超级视图中删除自定义视图?

如何在 uitableview 单元格上创建两个单选按钮