2014-12-29 2 views
0

Я создал пользовательскую ячейку UITableView, содержащую UIImage и несколько меток. Я пометил на UIImage как 100 и предпринимаю попытку обновить его следующим образом:Обновление UIImage в UITableView

import UIKit 

class SecondViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

@IBOutlet weak var tableView: UITableView! 


let Items = ["Altitude","Distance","Groundspeed"] 

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell 
    cell.textLabel?.text = self.Items[indexPath.row] 

    var CellImageView: UIImageView? = cell.viewWithTag(100) as UIImageView? 
    CellImageView!.image = UIImage(named: "Airspeed") 

    return cell 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") 
} 

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

} 

Как я должен обновить UIImage? В настоящее время я получаю ошибку EXC_BAD_INSTRUCTION при запуске моего приложения.

ответ

1

Вам нужно проверить, не является ли CellImageView не ноль , просто добавьте оператор if, как я сделал код. Это происходит с вами, потому что CellImageView - это nil.If вы проверяете CellImageView, ничего не произойдет. Так что, когда у вас есть опциональный всегда проверяйте ее перед использованием it.i не знаю, что вы хотите сделать с viewWithTag.You может использовать другой вид, чтобы загрузить изображение с помощью override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) .ex

в этом, как я сделал в моем проекте

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    // Get the new view controller using [segue destinationViewController]. 
    var secondeScene = segue.destinationViewController as DisplayViewController 
    // Pass the selected object to the new view controller. 
    if let indexPath = self.tableView.indexPathForSelectedRow(){ 
     let selectedPhoto = photos[indexPath.row] 
     secondeScene.currentPhoto = selectedPhoto 
    } 

import UIKit 

class SecondViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

@IBOutlet weak var tableView: UITableView! 


let Items = ["Altitude","Distance","Groundspeed"] 

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell 
    cell.textLabel?.text = self.Items[indexPath.row] 

    var CellImageView: UIImageView? = cell.viewWithTag(100) as UIImageView?//CellImageView is an optional 
if CellImageView !== nil{//checking for CellImageView 
    CellImageView!.image = UIImage(named: "Airspeed") 
    } 
    return cell 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") 
} 

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

Просто используйте этот

import UIKit 

класса SecondViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var tableView: UITableView! 

let image = UIImage(named: "Airspeed") 
let Items = ["Altitude","Distance","Groundspeed"] 

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell 
    cell.textLabel?.text = self.Items[indexPath.row] 

    var CellImageView: UIImageView? = cell.viewWithTag(100) as UIImageView? 
    //if CellImageView !== nil{ 
    //CellImageView!.image = UIImage(named: "Airspeed") 
    //} 
    return cell 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    // Get the new view controller using [segue destinationViewController]. 
    var secondeScene = segue.destinationViewController as DisplayViewController 
    // Pass the selected object to the new view controller. 
    if let indexPath = self.tableView.indexPathForSelectedRow(){ 
     let selectedPhoto = image 
     secondeScene.currentPhoto = selectedPhoto 


    } 

}

Это первый вид, а затем использовать это для второй точки зрения

class DisplayViewController: UIViewController { 

var currentPhoto: UIImage?

@IBOutlet слабый var curentImage: UIImageView!

переопределение FUNC viewDidLoad() { super.viewDidLoad()

var image = UIImage(named: currentPhoto!.filename) 
curentImage.image = image 



// Do any additional setup after loading the view. 

}

переопределение FUNC didReceiveMemoryWarning() { super.didReceiveMemoryWarning()

Это Виль загрузить изображение на другой взгляд. Добавьте этот класс с видом в IB

+0

Я просто смущен тем, почему мне нужен второй класс? Почему я не могу просто ссылаться на свой UIImageView в первом классе, используя идентификатор, который я создал в построителе интерфейса? Я бы предпочел сохранить все в одном классе, если бы мог. – user3185748

Смежные вопросы