programing

Swift의 UITableView에 새 셀을 삽입하는 방법

powerit 2023. 8. 11. 22:38
반응형

Swift의 UITableView에 새 셀을 삽입하는 방법

저는 두 개의 프로젝트를 진행하고 있습니다.UITableViews와 2UITextFields, 사용자가 버튼을 누르면 첫 번째 데이터가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()
    }
}

결과는 다음과 같습니다.

enter image description here

스위프트 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

반응형