2016-06-08 2 views
-1

У меня есть TableView и Cell, основанный на массиве. Теперь я хочу изменить переменную, основанную на значении ведьмы массива, которое отображается в ячейке.Содержимое UITableViewCell

var array = ["first", "second", "third"] 
var result = String 

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

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let Cell = self.tableView.dequeueReusableCellWithIdentifier("CellID", forIndexPath: indexPath) as UITableViewCell 

     Cell.textLabel?.text = array[indexPath.row] 

// and here I need the content of the Cell 

     switch Cell."content argument" { 
      case "first": 
       var result = "works" 
      case "second": 
       var result = "works also" 
      case "third": 
       var result = "what a surprise, works also" 
      default: 
       var result = "doesn't work" 
     } 

     return Cell 

    } 

и здесь мне нужен аргумент, чтобы получить содержимое ячейки. и, пожалуйста, ничего с «Вы должны создать новый файл или функцию или расширение», нет, просто аргументы, пожалуйста!

+0

Я считаю, вы ищете switch Cell.textLabel? .text –

+0

Можете ли вы уточнить, чего вы пытаетесь достичь? С какими аргументами и содержанием вы ссылаетесь? Синтаксис объекта. "String", который вы использовали, не поддерживается в Swift. Кроме того, я бы посоветовал не использовать имена переменных капитала, но это еще одна тема. –

+0

спасибо, но я пробовал это раньше, и это не работает, это дает мне код ошибки «String» не может быть членом в «String»? – PascalCzasny

ответ

0

Проблема, с которой вы столкнулись при переключении на основе Cell.textLabel?.text, заключается в том, что textLabel является Optional, так что это текст Optional. Optional - это перечисление с двумя корпусами, .Some и .None, поэтому ваши случаи не работали.

Существует два возможных решения.

  1. Поместите переключатель внутри if let заявление:

    Cell.textLabel?.text = array[indexPath.row] 
    
    if let text = Cell.textLabel?.text { 
        switch text { 
         case "first": 
          var result = "works" 
         case "second": 
          var result = "works also" 
         case "third": 
          var result = "what a surprise, works also" 
         default: 
          var result = "doesn't work" 
        } 
    } 
    
  2. Не включайте на основе содержимого ячейки, а на своем, не Необязательные данные:

    let text = array[indexPath.row] 
    Cell.textLabel?.text = text 
    
    switch text { 
        case "first": 
         var result = "works" 
        case "second": 
         var result = "works also" 
        case "third": 
         var result = "what a surprise, works also" 
        default: 
         var result = "doesn't work" 
    } 
    

И тогда возникает проблема, заключающаяся в том, что вы создаете много неиспользуемых локальных переменных, все из которых называются результат. Так что давайте лучше сделать его постоянным и установить его в переключателе, и, возможно, добавить результат в ячейке, например:

let text = array[indexPath.row] 

    let result: String 
    switch text { 
     case "first": result = "works" 
     case "second": result = "works also" 
     case "third": result = "what a surprise, works also" 
     default:  result = "doesn't work" 
    } 

    Cell.textLabel?.text = text 
    Cell.detailTextLabel?.text = result 

Вот весь код необходимо:

import UIKit 

class TableViewController: UITableViewController { 
    var array = ["first", "second", "third"] 

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

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

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) 

     let text = array[indexPath.row] 
     let result: String 
     switch text { 
     case "first": result = "works" 
     case "second": result = "works also" 
     case "third": result = "what a surprise, works also" 
     default:  result = "doesn't work" 
     } 

     cell.textLabel?.text = text 
     cell.detailTextLabel?.text = result 
     return cell 
    } 
} 
+0

Я пробовал все три метода, но он всегда показывает, что я не работаю – PascalCzasny

+0

Я не знаю, почему это не работает для вас, вы, вероятно, делаете что-то еще не так, поэтому я добавил пример со всем необходимым кодом. Я просто тестировал его, и он отлично работает. http://s33.postimg.org/vpqcs323z/Simulator_Screen_Shot_Jun_8_2016_12_32_21_PM.png –

+0

нет, он показывает все с не работает – PascalCzasny

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