我想在 swift3 的 tableview 中插入行作为部分

Posted

技术标签:

【中文标题】我想在 swift3 的 tableview 中插入行作为部分【英文标题】:i want to insert rows as section in tableview in swift3 【发布时间】:2017-08-31 06:57:47 【问题描述】:

我已成功在数组中追加数据,但 UITableView 没有插入和显示该数据。

但显示以下错误

由于未捕获的异常而终止应用程序 'NSInternalInconsistencyException',原因:'尝试插入第 4 行 进入第 0 节,但在第 0 节之后只有 0 行 更新”

我试过这样:

        super.viewDidLoad()

    array1=["A1","B1","C1","D1"]
    array2=["A2","B2","C2","D2"]
    array3=["A3","B3","C3","D3"]
    array4=["A4","B4","C4","D4"]
    dict1=[0:array1,1:array2,3:array3,4:array4,2:names]
    print( (dict1))
    print( (dict1[1]?.count)!)
    print(dict1.keys.count)


    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int


   return (((dict1)[section])!.count)


public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

    if tableView == tableExplore 

    cellMain = tableView.dequeueReusableCell(withIdentifier:"cellExp", for: indexPath) as! ExploreLocallyCell
    cellMain.textLabel?.textColor = UIColor(red: 194.0/255, green: 198.0/255, blue: 198.0/255, alpha: 1.0)
        cellMain.textLabel?.text=(dict1[indexPath.section])?[indexPath.row]
    
    return cellMain


 public func numberOfSections(in tableView: UITableView) -> Int // Default is 1 if not implemented



return dict1.keys.count

  func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?

    return (names)[section]



public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

  self.insert(section:indexPath.section, row: indexPath.row)


func insert(section:Int,row:Int)

   print(dict1[section]!)
    // Update Table Data
    tableView.beginUpdates()
 dict1[section]!.append("BAlu")
    print(dict1[section]!)
    tableView.insertRows(at: [IndexPath(row:dict1[section]!.count-1, section: section)], with: .automatic)
    tableView.endUpdates()
    tableView.reloadData()


【问题讨论】:

【参考方案1】:
// No need of tableView.beginUpdates() and tableView.endUpdates() while you need to do one or two modification in UITableView 
// While you are inserting row in table programatically then no need of tableView.reloadData() because its has no meaning to do it. You should either insert or reload. It will give you same result. Diff is reload will take more performs time then insert row. 

func insert(section:Int,row:Int)

    print(dict1[section]!)
    // Update Table Data
    dict1[section]!.append("BAlu")
    print(dict1[section]!)
    tableView.insertRows(at: [IndexPath(row:dict1[section]!.count-1, section: section)], with: .automatic)


//Or
func insert(section:Int,row:Int)

    print(dict1[section]!)
    // Update Table Data
    dict1[section]!.append("BAlu")
    print(dict1[section]!)
    tableView.reloadData()

【讨论】:

以上是关于我想在 swift3 的 tableview 中插入行作为部分的主要内容,如果未能解决你的问题,请参考以下文章

使用swift3在tableview中搜索栏和部分

如何在 Swift 3 中使用 JSON 填充 TableView

多个位置的相同TableView swift 3

我想在我的 ios 应用程序中播放在线视频,我正在使用 Swift3 + xcode [重复]

Swift 3- 从主线程更新 UI

Swift 3 TableView Segue 到多个其他 TableViews