在表格视图中按下单元格上的按钮时如何创建新单元格
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?