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

标签 ios uitableview swift3

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

但是出现如下错误

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to insert row 4 into section 0, but there are only 0 rows in section 0 after the update'

我试过这样的:

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

}

最佳答案

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

关于ios - 我想在 swift3 的 tableview 中插入行作为部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45975131/

相关文章:

ios UITableview 单个单元格上的多个选择选项?

iphone - 在 UITableViewCell 中滑动删除有白色背景,需要清除

swift3 - 如何在 swift 3 的测试目标中使用 XCGLogger?

ios - 如何更新自动调整表格 View 高度?

ios - Alamofire 不想在查询中接受我的参数 - 它在调用中说额外的参数

ios - 根据另一个 View Controller 更改 viewController BG 颜色

iphone - 最终配置文件发送到设备

ios - ScrollView 的MVC

ios - 在 ViewController 中创建可滑动 View

ios - 更新 RestKit : loadObjectsAtResourcePath: usingBlock: don't save objects in cache