或者如何在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
}
}
答案 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.
}
}