2016-05-29 5 views
0

Имейте структуру, где есть 2 типа - изображение и текст. Имейте массив, где он будет добавлен. Как сделать проверку типа в cellForRowAtIndexPath?Тип проверки конструкции | Swift

struct typeArray { 
    var text: String? 
    var image: UIImage? 

    init(text: String){ 
     self.text = text 
    } 

    init(image: UIImage){ 
     self.image = image 
    } 
} 

var content = [AnyObject]() 

Image добавить кнопку:

let obj = typeArray(image: image) 
    content.append(obj.image!) 
    self.articleTableView.reloadData() 

Текст добавить кнопку:

let obj = typeArray(text: self.articleTextView.text as String!) 
    self.content.append(obj.text!) 
    self.articleTableView.reloadData() 

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

    if content[indexPath.row] == { 

     let cell = self.articleTableView.dequeueReusableCellWithIdentifier("Text Cell", forIndexPath: indexPath) as! TextTableViewCell 

     cell.textArticle.text = content[indexPath.row] as? String 

     return cell 

    } 

    else if content[indexPath.row] == { 

     let cell = self.articleTableView.dequeueReusableCellWithIdentifier("Image Cell", forIndexPath: indexPath) as! ImageTableViewCell 

     cell.backgroundColor = UIColor.clearColor() 
     cell.imageArticle.image = content[indexPath.row] as? UIImage 

     return cell 
    } 
    return UITableViewCell() 
} 
+0

'cellForRowAtIndexPath' не место, чтобы строить массивы ; нет гарантии того, какой порядок будет вызываться этой функцией; вам нужно использовать предоставленную 'indexPath', чтобы определить, какую строку вы используете на – Paulw11

+0

@ Paulw11, что вы можете посоветовать в этой ситуации? –

+0

Я бы предположил, что у вас есть один массив структур, где каждая структура может содержать текст или изображение, а затем использовать это в 'cellForRowAtIndexPath'. – Paulw11

ответ

0

Вы должны объявить content массив для хранения экземпляров вашей typeArray структуры;

var content = [typeArray]() 

Затем добавьте экземпляры структуры в массив:

let obj = typeArray(image: image) 
content.append(obj) 
self.articleTableView.reloadData() 

Затем вы можете использовать это в вашем cellForRowAtIndexPath -

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

    let rowStruct = content[indexPath.row] { 
    if let text = rowStruct.text { 
     let cell = self.articleTableView.dequeueReusableCellWithIdentifier("Text Cell", forIndexPath: indexPath) as! TextTableViewCell 
     cell.textArticle.text = text 
     return cell 
    } else if let image = rowStruct.image { 
     let cell = self.articleTableView.dequeueReusableCellWithIdentifier("Image Cell", forIndexPath: indexPath) as! ImageTableViewCell 
     cell.backgroundColor = UIColor.clearColor() 
     cell.imageArticle.image = image 
     return cell 
    } 
    return UITableViewCell() 
} 
+0

сбой на let rowStruct = content [indexPath.row], «Невозможно вызвать значение нефункционного типа vc.typeArray» –

+0

Я сделал, если let text = content [indexPath.row] .text, и он работает fine –

+0

Вам нужно добавить экземпляры структуры, а не изображения в массив. См. Мое редактирование – Paulw11

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