Swift의 UITableView에 새 셀을 삽입하는 방법
저는 두 개의 프로젝트를 진행하고 있습니다.UITableView
s와 2UITextField
s, 사용자가 버튼을 누르면 첫 번째 데이터가textField
에 들어가야 합니다.tableView
그리고 두 번째는 두 번째로 들어갑니다.tableView
문제는 데이터를 어떻게 저장해야 할지 모른다는 것입니다.tableView
사용자가 버튼을 누를 때마다 데이터를 삽입하는 방법을 알고 있습니다.tableView:cellForRowAtIndexPath:
하지만 제가 아는 한 그것은 한 번 작동합니다.그러면 어떤 방법으로 업데이트할 수 있습니까?tableView
사용자가 버튼을 누를 때마다?
사용하다beginUpdates
그리고.endUpdates
단추를 클릭할 때 새 셀을 삽입합니다.
@vadian이 논평에서 말했듯이,
begin/endUpdates
단일 삽입/삭제/이동 작업에는 영향을 주지 않습니다.
먼저 테이블 뷰 배열에 데이터를 추가
Yourarray.append([labeltext])
그런 다음 테이블을 업데이트하고 새 행을 삽입합니다.
// Update Table Data
tblname.beginUpdates()
tblname.insertRowsAtIndexPaths([
NSIndexPath(forRow: Yourarray.count-1, inSection: 0)], withRowAnimation: .Automatic)
tblname.endUpdates()
이것은 셀을 삽입하고 전체 테이블을 다시 로드할 필요가 없지만 문제가 발생하면 사용할 수도 있습니다.tableview.reloadData()
스위프트 3.0
tableView.beginUpdates()
tableView.insertRows(at: [IndexPath(row: yourArray.count-1, section: 0)], with: .automatic)
tableView.endUpdates()
목표-C
[self.tblname beginUpdates];
NSArray *arr = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:Yourarray.count-1 inSection:0]];
[self.tblname insertRowsAtIndexPaths:arr withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tblname endUpdates];
Swift 5.0, 4.0, 3.0 업데이트된 솔루션
하단에 삽입
self.yourArray.append(msg)
self.tblView.beginUpdates()
self.tblView.insertRows(at: [IndexPath.init(row: self.yourArray.count-1, section: 0)], with: .automatic)
self.tblView.endUpdates()
테이블 뷰 맨 위에 삽입
self.yourArray.insert(msg, at: 0)
self.tblView.beginUpdates()
self.tblView.insertRows(at: [IndexPath.init(row: 0, section: 0)], with: .automatic)
self.tblView.endUpdates()
다음은 두 테이블 모두에 데이터를 추가하기 위한 코드입니다. 보기:
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var table1Text: UITextField!
@IBOutlet weak var table2Text: UITextField!
@IBOutlet weak var table1: UITableView!
@IBOutlet weak var table2: UITableView!
var table1Data = ["a"]
var table2Data = ["1"]
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func addData(sender: AnyObject) {
//add your data into tables array from textField
table1Data.append(table1Text.text)
table2Data.append(table2Text.text)
dispatch_async(dispatch_get_main_queue(), { () -> Void in
//reload your tableView
self.table1.reloadData()
self.table2.reloadData()
})
table1Text.resignFirstResponder()
table2Text.resignFirstResponder()
}
//delegate methods
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView == table1 {
return table1Data.count
}else if tableView == table2 {
return table2Data.count
}
return Int()
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if tableView == table1 {
let cell = table1.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
let row = indexPath.row
cell.textLabel?.text = table1Data[row]
return cell
}else if tableView == table2 {
let cell = table2.dequeueReusableCellWithIdentifier("Cell1", forIndexPath: indexPath) as! UITableViewCell
let row = indexPath.row
cell.textLabel?.text = table2Data[row]
return cell
}
return UITableViewCell()
}
}
결과는 다음과 같습니다.
스위프트 5용
셀 제거
let indexPath = [NSIndexPath(row: yourArray-1, section: 0)]
yourArray.remove(at: buttonTag)
self.tableView.beginUpdates()
self.tableView.deleteRows(at: indexPath as [IndexPath] , with: .fade)
self.tableView.endUpdates()
self.tableView.reloadData()// Not mendatory, But In my case its requires
새 셀 추가
yourArray.append(4)
tableView.beginUpdates()
tableView.insertRows(at: [
(NSIndexPath(row: yourArray.count-1, section: 0) as IndexPath)], with: .automatic)
tableView.endUpdates()
Apple의 UITableView 프레임워크에서 다음 설명을 찾을 수 있습니다.
// Use -performBatchUpdates:completion: instead of these methods, which will be deprecated in a future release.
따라서 다음을 사용해야 합니다.
tableView.performBatchUpdates { [unowned self] in
tableView.insertRows(at: indexPaths, with: animation)
}
언급URL : https://stackoverflow.com/questions/31870206/how-to-insert-new-cell-into-uitableview-in-swift
'programing' 카테고리의 다른 글
stringstream, string 및 char* 변환 혼동 (0) | 2023.08.11 |
---|---|
XMLHttpRequest:네트워크 오류 0x80070005, Microsoft Edge에서 액세스가 거부됨(IE는 아님) (0) | 2023.08.11 |
ImageView 소스 변경 (0) | 2023.08.11 |
python을 사용하여 데이터베이스에서 최신 데이터 반복 선택 (0) | 2023.08.11 |
jQuery를 사용하여 CKEditor의 iframe에서 내용 가져오기 (0) | 2023.08.06 |