program tip

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

radiobox 2020. 11. 16. 08:04
반응형

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


저는 두 개의 UITableViews와 두 개의 s 가있는 프로젝트에서 작업 중입니다. UITextField사용자가 버튼을 누르면 첫 번째 데이터 textField는로 이동 tableView하고 두 번째 데이터 는 두 번째로 이동합니다 tableView. 내 문제는 tableView사용자가 버튼을 누를 때마다 데이터를 넣는 방법을 모르고 데이터를 삽입하는 방법을 알고 tableView:cellForRowAtIndexPath:있지만 내가 아는 한 한 번만 작동한다는 것입니다. 그렇다면 tableView사용자가 버튼을 누를 때마다을 업데이트하려면 어떤 방법을 사용할 수 있습니까?


버튼 클릭시 및를 사용 beginUpdates하여 endUpdates새 셀을 삽입합니다.

먼저 tableview 배열에 데이터를 추가하십시오.

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];

다음은 두 tableView에 데이터를 추가하는 코드입니다.

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()
    }
}

결과는 다음과 같습니다.

여기에 이미지 설명 입력


Swift 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()

TableView 상단에 삽입

self.yourArray.insert(msg, at: 0)
self.tblView.beginUpdates()
self.tblView.insertRows(at: [IndexPath.init(row: 0, section: 0)], with: .automatic)
self.tblView.endUpdates()

참고 URL : https://stackoverflow.com/questions/31870206/how-to-insert-new-cell-into-uitableview-in-swift

반응형