2017-01-26 3 views
0

Я застрял на этой проблеме. Я загружаю json-файл из Firebase и успешно показываю в TableView. Этот TableView имеет пользовательскую ячейку с двумя ярлыками. Я установил ссылку segue из пользовательской ячейки в Detail ViewController. Это работает отлично, но теперь я хочу взять текстовое содержимое ярлыков ячеек и отправить в целевой ViewController.Отправка пользовательского письма с этикеткой в ​​поле назначения до места назначения

У меня не было никаких проблем с этим в прошлом, но у меня возникли проблемы с реализацией этого из label.text в пользовательской ячейке.

Я использую метки меток (label1 и label2, хотя иногда я могу изменить это на названия меток).

Вопрос в том, как получить текстовое содержимое из двух меток из выделенной строки и передать их в DetailViewController? Все мои попытки до сих пор потерпели неудачу. Есть ли что-то я должен делать в:

valueToPass = currentCell?.textLabel?.text 

Вот код:

struct postStruct { 
    let property : String! 
    let propType : String! 
    } 

class TableViewController: UITableViewController { 

var posts = [postStruct]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.tableView.delegate = self 
    self.tableView.dataSource = self 

    let databaseRef = FIRDatabase.database().reference() 

    databaseRef.child("users").queryOrderedByKey().observe(.childAdded, with: { 
     snapshot in 

     let snapshotValue = snapshot.value as? NSDictionary 
     let property = snapshotValue!["property"] as? String 

     let propType = snapshotValue!["type"] as? String 

     self.posts.insert(postStruct(property: property, propType: propType), at: 0) 
     self.tableView.reloadData() 
    }) 
    } 

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

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") 

    let label1 = cell?.viewWithTag(1) as! UILabel 
    label1.text = posts[indexPath.row].property 

    let label2 = cell?.viewWithTag(2) as! UILabel 
    label2.text = posts[indexPath.row].propType 
    // print(posts) 
    // cell.setcell(valueToPass.label1) 
     return cell! 
} 

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

var valueToPass:String! 

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 

    // Get Cell Label 
    let indexPath = tableView.indexPathForSelectedRow; 
    let currentCell = tableView.cellForRow(at: indexPath!) as UITableViewCell!; 

    valueToPass = currentCell?.textLabel?.text 
    performSegue(withIdentifier: "detailSegue", sender: self) 
     } 

Любая помощь приветствуется, в частности, примеры кода. Большое спасибо в ожидании

ответ

1

Создайте собственный класс для вашего TableCell и присоедините розетки в StoryBoard.

создание клеток в cellForRowAt становится

let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") As! MyCustomCell 
cell.label1.text = posts[indexPath.row].property 
cell.label2.text = posts[indexPath.row].propType 

, а затем didSelectRowAtIndexPath становится

let indexPath = tableView.indexPathForSelectedRow 
let currentCell = tableView.cellForRow(at: indexPath!) as! MyCustomCell 

self.valueToPass = currentCell.label1?.text 
performSegue(withIdentifier: "detailSegue", sender: self) 

Последнее, что вам нужно, если подготовиться к Segue

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
{ 
    if segue.identifier == "detailSegue" // you may have more than one segue, so you should check 
    { 
     let destinationController : DestinationViewControllerClass = segue.destination as! DestinationViewControllerClass 
     destinationController.valueToPass = self.valueToPass 
    } 
} 
+0

Привет, и спасибо за принимая время, чтобы ответить. Однако у меня есть несколько вопросов. Должен ли пользовательский класс быть подклассом UITableViewController или подкласса TableViewCell? Не удалось подключить розетки в TableViewCell. Должно ли это быть в TableViewController? Я правильно понял, что код, который вы указали, находится в TableViewController? Если это так, я получил некоторые ошибки, когда я попробовал это, например. let cell = tableView.dequeueReusableCell (withIdentifier: "Cell") Как! MyCustomCell дал ошибку «последовательные объявления в строке должны быть разделены; ' – PhilipS

+0

Наверное, лучше всего отнести это к чатам - я установил один из них под названием TableView ... – Russell

+0

Привет, мне интересно, можете ли вы помочь мне решить другую проблему. Я задал вопрос, но не получил никаких ответов. На самом деле следует из последней проблемы, которую вы мне любезно помогли: http://stackoverflow.com/questions/41937700/swift-3-passing-var-through-a-series-of-segues-viewcontrollers – PhilipS