Swift tableViewCell在滚动时保持重复

时间:2016-01-25 00:17:14

标签: ios swift uitableview

我已经阅读了关于

的每一个帖子
if(cell == nil)

但是这会引发无法比拟的错误。我已经尝试了几天让我的tableViewCells在它已经存在时停止重复。有人帮忙!!我的部分标题中的标题甚至重复并相互叠加。我假设我的图像也是重复的。当我在我的iphone上测试时,滚动都是滞后的。

ViewController.swift

import UIKit
import SwiftyJSON
import Alamofire
import AVFoundation


class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource  {

@IBOutlet weak var navigationBar: UINavigationItem!
@IBOutlet weak var tableView: UITableView!

var list = []
var audioPlayer:AVAudioPlayer!

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func getListBro() -> NSArray {
    return list
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    tableView.dataSource = self;
    tableView.delegate = self;
    self.tableView.rowHeight = UITableViewAutomaticDimension



    let streamURL = NSURL(string: "http://localhost:8000/beat-stream-all/")!

    let stuff = GetBeatStream(url:streamURL)
    self.tableView.rowHeight = UITableViewAutomaticDimension;
    self.tableView.estimatedRowHeight = 50.0; //
    stuff.downloadJSONFromURL {
        (let jsonDictionary) in
            if let jsonList = jsonDictionary["results"] as? NSArray {
                self.list = jsonList
            }


            let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
            dispatch_async(dispatch_get_global_queue(priority, 0)) {
                // do some task
                dispatch_async(dispatch_get_main_queue()) {
                    // update some UI
                    self.tableView.reloadData()
                }
            }
    }

}//end view did load


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

    let cell = tableView.dequeueReusableCellWithIdentifier("streamCell") as? StreamTableViewCell

        if let beat_cover = list[indexPath.section] as? NSDictionary {
            if let beat_cover_image = beat_cover["beat_cover"] as? String {
                cell?.beatCover.image =  UIImage(data: NSData(contentsOfURL: NSURL(string:beat_cover_image)!)!)
            }
        }


        if let descriptionSection = list[indexPath.section] as? NSDictionary {
            if let description = descriptionSection["description"] as! NSString? {
                    cell?.beatDescription.text = description as String

                cell?.beatDescription.lineBreakMode = NSLineBreakMode.ByWordWrapping
        }

    }



    if let audio = list[indexPath.section] as? NSDictionary {
        if let audio_url = audio["audio"] as? String {
                cell?.url = audio_url
                cell?.buildPlayer()
        }
    }

    return cell!
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return list.count
}

func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {

//        USERNAME
    let beatAuthorLabel = UILabel(frame: CGRectMake(55, 5, 200, 40))

    //USER PIC
    let profilePictureImageView = UIImageView(frame: CGRectMake(5, 5, 40, 40));
    profilePictureImageView.layer.borderWidth = 0
    profilePictureImageView.layer.masksToBounds = false
    profilePictureImageView.layer.borderColor = UIColor.blackColor().CGColor
    profilePictureImageView.layer.cornerRadius = profilePictureImageView.frame.height/2
    profilePictureImageView.clipsToBounds = true
    profilePictureImageView.layer.masksToBounds = true


    if let userPicSection = list[section] as? NSDictionary {
        if let artist = userPicSection["artist"] as? NSDictionary {
            if let profilePic = artist["profile_pic"] as? String {
                let image = UIImage(data: NSData(contentsOfURL: NSURL(string:profilePic)!)!)
                profilePictureImageView.image = image;
            }
        }
    }


    if let nameSection = list[section] as? NSDictionary {
        if let name = nameSection["artist"] as? NSDictionary {
            if let adminName = name["admin_name"] as? NSString {
                beatAuthorLabel.text = adminName as String
            }
        }
    }

    let dateLabel = UILabel(frame: CGRectMake(225, 5, 200, 40))
    if let created = list[section] as? NSDictionary {
        if let date = created["created_at"] as? String {
            dateLabel.text = date as String
            dateLabel.font = UIFont(name: dateLabel.font.fontName, size: 8)

        }
    }

    let header: UITableViewHeaderFooterView = view as! UITableViewHeaderFooterView
    header.addSubview(beatAuthorLabel)
    header.addSubview(dateLabel)
    header.contentView.addSubview(profilePictureImageView)
    header.contentView.backgroundColor = UIColor(red: 179/255, green: 194/255, blue: 191/255, alpha:1)
    header.textLabel!.textColor = UIColor.whiteColor()
    header.alpha = 1

}

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 50
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let indexPath = tableView.indexPathForSelectedRow
    let currentCell = tableView.cellForRowAtIndexPath(indexPath!)! as! StreamTableViewCell
    currentCell.player.play()
}

func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    let leavingCell = cell as! StreamTableViewCell
    leavingCell.player.pause()
}




}

0 个答案:

没有答案