-1
*追加ボタンを押すたびに新しい行を挿入したい(条件:有効な電子メールアドレスを入力する)。ここで 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._%+-][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")
}
}
私の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を呼び出し、私にセルの更新数を渡していますテーブルビューですが、動作していません。
'ViewController'に**モデル**(データソース配列)が必要です。*コントローラ*関連ロジックを**ビュー**(セル)から**コントローラ**に移動する必要があります。 – vadian