2014-10-30 2 views
0

Я пытаюсь заполнить контроллер подробного представления информацией о том, какая ячейка таблицы выбрана. Я пытался сделать то, что я думал, что мог бы работать, но я получаю сообщение об ошибке «использование неразрешенного идентификатора„подробно“на линиях, которые говорят, если (подробно) в классе детальный вид контроллера.Использование переменных перекрестного класса в swift

@IBOutlet var detailText: UILabel! 



override func viewDidLoad() { 
    super.viewDidLoad() 

    if (detail = "conferenceapp") { 
    self.detailText.text = "lol" 
    } 

    if (detail = "spaceshooter") { 
     self.detailText.text = "spaceshooter" 
    } 

Booth структура

struct Booth { 
let category : String 
let name : String 
let detail : String 

}

Таблица кода класс представления контроллера фрагмент

var booths = [Booth]() 
var filteredBooths = [Booth]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    //fill array with data 
    self.booths = [Booth(category: "Tech", name: "Conference App", detail: "conferenceapp"), 
     Booth(category: "Tech", name: "Space Shooter", detail: "spaceshooter"), 
     Booth(category: "Tech", name: "RollABall", detail: "rollaball"), 
     Booth(category: "Animation", name: "Sugar Hill City Model", detail: "sugar"), 
     Booth(category: "Animation", name: "3D Sculpting 101", detail: "3d"), 
     Booth(category: "Animation", name: "HowTo - Texture", detail: "howto"), 
     Booth(category: "Science", name: "AP Biology for Dummies", detail: "apbio"), 
     Booth(category: "Science", name: "Cells", detail: "cells"), 
     Booth(category: "Science", name: "Space", detail: "space")] 

пл облегчить помощь, мне нужно исправить ошибку

ответ

1

Общим способом передачи данных в подробный вид является функция prepareForSegue. Пример:

import UIKit 

class MasterViewController: UITableViewController { 

    let items = ["Bob","Joe"] 

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

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

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

     cell.textLabel.text = items[indexPath.row] 

     return cell 
    } 

//Passing details to detail VC 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

      let indexPath = self.tableView.indexPathForSelectedRow() 
      let theDestination = (segue.destinationViewController as DetailViewController) 
      theDestination.itemName = items[indexPath!.row] 
    } 

} 

import UIKit 

class DetailViewController: UIViewController { 

    @IBOutlet weak var nameLabel: UILabel! 

    var itemName = "" 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     nameLabel.text = itemName 
    } 

} 
+0

Я пытаюсь отправить детали в структурах стендов, которые установлены равными строкам, таким как self.booths = [Booth (категория: «Tech», имя: «Приложение для конференции», деталь: «Conferenceapp»), – user3558131

+0

В классе детали я должен проверить, равна ли «детали» любой из строк, которые она установлена ​​в этих «Бутах» (категория: «Технология», имя: «Космический шутер», деталь: «космический стрелок»), Бут (категория: «Технология», имя: «RollABall», подробно: «rollaball»), Бут (категория: «Анимация», название: «Sugar Hill City Model», подробнее: «сахар»), Бут (категория: «Анимация», имя: «3D Sculpting 101», подробнее: «3d»), ' – user3558131

+1

Вы все еще делаете это так, как я вам показываю. Я предполагаю, что каждая строка таблицы получает элемент из массива? Если это так, вы отправляете кабины [indexPath !.row] вместо пунктов [indexPath !.row] в моем примере –

1

Проблема заключается в том, что вы говорите if (detail = "conference app") но нет ничего определено под названием «деталь». Откуда должна появиться любая «детальная» переменная? Вы пытаетесь сослаться на detail стенда? Тогда вам нужен стенд, и вам нужно указать его номер. Но у вас нет стенда, и в любом случае просто говоря «подробно», поскольку голые слова не относятся к его деталям.

Также интересно, имеете ли вы значение if (detail == "conference app"). Вы не можете использовать один знак равенства в Swift так, как вы делаете.

+0

Я пытаюсь получить доступ к «детали» в стенде struct – user3558131

+0

В одном из эти Booth (категория: «Tech», имя: «Space Shooter», detail: «spacehooter»), – user3558131

+1

Но, как я уже сказал, предполагается, что у вас есть _reference to_ один из этих объектов Booth. Вы этого не сделаете. И даже если бы вы это сделали, вы не могли просто сказать «деталь». Вам нужно будет сказать 'someBooth.detail' (если« someBooth »было именем вашего объекта Booth). – matt

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