如何将Images.xcassets中的图像加载到UIImage中

时间:2016-04-19 01:45:29

标签: xcode swift

我正在尝试将图像编码为UIImage,但我遇到了麻烦。我不确定如何为每个列表项的每个不同图像编码。我正在构建的应用程序是一个列表,其中包含附加到每个列表项的图片。

以下是MyWhatsit课程:

class MyWhatsit {

var name: String {
    didSet {
        postDidChangeNotification()
    }
}
var location: String {
    didSet {
        postDidChangeNotification()
    }
}
var image: UIImage? {
    didSet {
        postDidChangeNotification()
    }
}
var viewImage: UIImage {
    return image ?? UIImage(named: "camera")!
}

init( name: String, position: String = "" ) {
    self.name = name
    self.location = location
}

func postDidChangeNotification() {
    let center = NSNotificationCenter.defaultCenter()
    center.postNotificationName(WhatsitDidChangeNotification, object: self)
}

}

以下是表格视图:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return things.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
    let thing = things[indexPath.row] as MyWhatsit
    cell.textLabel?.text = thing.name
    cell.detailTextLabel?.text = thing.location
    cell.imageView?.image = thing.viewImage
    return cell
}

override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
    // Return false if you do not want the specified item to be editable.
    return true
}

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {
        things.removeAtIndex(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
    } else if editingStyle == .Insert {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
    }
}

3 个答案:

答案 0 :(得分:3)

我相信你需要做的就是像标题和副标题一样创建一系列图像。添加其他图片时,将图像名称添加到数组并附加tableView。

我在您的代码中看到的是名称和位置。看起来您需要添加“图像”并将其设置为图像的名称。例如,MyWhatsit(name: "Bob Smith", position: "midfielder", image: "bobSmithImage") ...然后将单元格的图像视图设置为等于图像名称。

希望这会让你感动!

答案 1 :(得分:0)

您需要创建自己的个人类别。例如,根据玩家的位置对玩家进行排序。使用将图像存储到数组中的类。例如:

let goalkeeper = [UIImage(named:"ivanlucic"), UIImage(named:"manuelneuer")]
let rightBack = [UIImage(named:"danialves"), UIImage(named:"sergioramos")]

获得图像列表后,在cellForRowAtIndexPath内,您可以进行检查,并将其引用到您创建的阵列中。

答案 2 :(得分:0)

没有了解如何在tableview中设置代码,但可以添加名称为

的图像名称

其中图像键包含您存储在XCAssets中的图像名称

var things: [MyWhatsit] = [
    MyWhatsit(name: "Ivan Lucic", position: "Goalkeeper","image":"ivan"),
    MyWhatsit(name: "Manuel Neuer", position: "Goalkeeper","image":"manuel")...]

您可以在创建名称的同时初始化图像

init( name: String, position: String = "", imagename:string ) {
    self.name = name
    self.position = position
    self.imgview = UIImage(named:imagename)
}