如何将indexPath.row设置为要在NSTimer选择器函数中使用的tableview函数之外的变量

时间:2015-07-29 15:54:07

标签: ios xcode swift uitableview nstimer

或者如何在TableViewController文件的tableview函数中运行NSTimer选择器函数?我还是新手,所以请耐心等待。

我尝试使用NSTimer在TableViewController上为图像设置动画,以便每半秒连续更改一次图像。

根据我的理解,计时器需要一个选择器,这是一个将计数器变量设置为单元格图像的函数。

但我似乎无法在tableView函数之外获取indexPath.row,也无法运行NSTimer函数,因为选择器。

这是我的代码:

import UIKit

class tableViewController: UITableViewController {


override func viewDidLoad() {
    super.viewDidLoad()
  ....
}

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

    var myCell:cell = self.tableView.dequeueReusableCellWithIdentifier("cell") as cell

    var partySprites = array[indexPath.row]["partySprite"] as? String

    // The fixed 1 should be the dynamic variable as seen in the result function
    let image = UIImage(named: "sprites/\(partySprites!)1.png")
    myCell.partySprite.image = image

//        var timer = NSTimer()
//        timer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: Selector("result"), userInfo: nil, repeats: true)

        return myCell
    }

}

这就是我在结果函数中要做的事情:

        func result() {
            counter++
            if counter == 3 {
                counter = 1
            }

            let image = UIImage(named: "sprites/\(partySprites!)\(counter).png")
            myCell.partySprite.image = image

        }

但不能因为tableView函数之外的indexPath.row不存在,也不能在tableView函数内调用此函数。

谢谢!

编辑:我还有以下类,有助于识别表视图单元格中的图像,在声明myCell时也在tableViewController中使用

class cell: UITableViewCell {

@IBOutlet var partySprite: UIImageView!

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

}

1 个答案:

答案 0 :(得分:1)

您必须实现tableview的委托和数据源,它们需要配置三种方法。

您可以参考我的代码。我测试了我的项目,它可以工作

注意:您必须将tableviewcell的标识符设置为“myIdentifier”,这是我在代码中设置的标识符。如果您不知道在哪里设置,请转到attribute inspector(项目右上角),识别属性。我有很多照片,他们的名字是从“ad1.png”到“ad100.png”,你也必须改变你的图像的名字。

import UIKit

class ViewController: UITableViewController {

    var aTimer:NSTimer?
    var increcementCount:Int = 1
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        //init a NSTimer
        aTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "increase", userInfo: nil, repeats: true)
    }
    //this method was called every 0.5 second
    func increase() {
        increcementCount += 1
        self.tableView.reloadData()
    }
    //tableview datasource
    override func tableView(tableView: UITableView, sectionForSectionIndexTitle title: String, atIndex index: Int) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10
    }
    //tableview delegate
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let identifier = "myIdentifier"
        var cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier(identifier, forIndexPath: indexPath) as! UITableViewCell
        cell.textLabel?.text = "ok"
        //set your image
        cell.imageView?.image = UIImage(named: String(format: "%@%d.png", "ad", increcementCount))
        return cell
    }

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