ios - 如何使用按钮动态地将单元格添加到我的 TableView 中

标签 ios swift uitableview

我正在尝试使用按钮将单元格添加到我的表格 View 中。我读过和看过的所有内容都表明我写的东西应该有效,但事实并非如此。有什么建议吗?

import UIKit

class RootViewController: UITableViewController, UITableViewDataSource,     UITableViewDelegate {
private var cellPointSize: CGFloat!
private var albumsList: AlbumList!
private var albums:[Album]!
private let albumCell = "Album"

@IBOutlet var myTableView: UITableView!
override func viewDidLoad() {
    super.viewDidLoad()

    let preferredTableViewFont = UIFont.preferredFontForTextStyle(UIFontTextStyleHeadline)
    cellPointSize = preferredTableViewFont.pointSize
    albumsList = AlbumList.sharedAlbumList
    albums = albumsList.albums
    self.myTableView.dataSource = self
    self.myTableView.delegate = self

}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    tableView.reloadData()
}

// MARK: - Table view data source

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // Return the number of rows in the section.
    return albums.count
}

override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return "Albums"
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = myTableView.dequeueReusableCellWithIdentifier(albumCell, forIndexPath: indexPath) as! UITableViewCell
        //cell.textLabel?.font = fontForDisplay(atIndexPath: indexPath)
        cell.textLabel?.text = albums[indexPath.row].name
        cell.detailTextLabel?.text = albums[indexPath.row].artist
        return cell
       }

@IBAction func addNewAlbumAction(sender: UIBarButtonItem) {
    var newAlbum = Album(nameIn: "New Title", yearIn: "New Year", artistIn: "New Artist", labelIn: "New Label")
    albumsList.addAlbum(newAlbum)
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.myTableView.reloadData()
    })
}

func saveData(albumObject: Album) {
    var archiveArray = NSMutableArray(capacity: albums.count)
    for a in albums {
        var albumEncodedObject = NSKeyedArchiver.archivedDataWithRootObject(a)
        archiveArray.addObject(albumEncodedObject)
    }

    var userData = NSUserDefaults()
    userData.setObject(archiveArray, forKey: "albums")
    userData.synchronize()
}

我的相册数组正在正确添加数据。我可以在调试器中看到相册。第一次加载应用程序后,永远不会调用委托(delegate)方法。有什么想法吗?

最佳答案

tableView:numberOfRowsInSection:中,它返回albums.count

但是当按下按钮时,您会将新的album添加到albumsList

问题是,相册将无法更新。

<小时/>

所以我认为你应该返回albumsList.albums.count

并在tableView:cellForRowAtIndexPath:中,修改与albumsList.albums[indexPath.row]对应的单元格

关于ios - 如何使用按钮动态地将单元格添加到我的 TableView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31488454/

相关文章:

ios - 如何保存和加载具有自定义名称的 .txt 文件?

swift - 无法使用 swift 3 从其数据源获取单元格

iphone - 为什么我的函数被调用了两次?

ios - 设置 NSObject 属性 - EXC_BAD_ACCESS

ios - 在 cellForRowAtIndexPath : 处增长的事件字节数

swift - 使用 Parse 的 IOS 8 应用程序在更新后无法运行

ios - 无法在 swift 中调用非函数类型 'CLLocationCordinate2d' 的值

ios 应用程序被拒绝,因为没有授权使用 MFi 硬件

ios - 在 UITableViewCell 上使用 IB 的 "User Defined Runtime Attributes"

objective-c - 从 UITableView 中删除没有行的部分