2014-12-21 2 views
2

Хорошо, я впервые попросил о помощи здесь, как правило, я могу найти и найти свой ответ, но не в этот раз. У меня есть таблица, в которой отображаются изображения и имена. Если один из них выбран, он переходит в другое представление и данные проходят. Тем не менее, я пытаюсь получить эту переданную информацию для отображения в таблице, например: Name: (Passed Info), Age: (Passed Info), Gender: (Passed Info) и т. Д. Я знаю, что данные проходят, потому что я могу отображать информацию на ярлыке, но я не могу понять, как ее показать в таблице , Index вопрос? String Проблема?Быстрое отображение переданных данных от prepareForSegue

Это код, который передает данные:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    var detailsViewController: DetailsViewController = segue.destinationViewController as DetailsViewController 
    var horseIndex = appsTableView!.indexPathForSelectedRow()!.row 
    var selectedHorse = self.horses[horseIndex] 
    detailsViewController.horse = selectedHorse 

Это код на контроллере получать данные, где я хочу, чтобы таблица отображения

class DetailsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

@IBOutlet var tableView: UITableView! 
@IBOutlet weak var titleLabel: UILabel! 

var horse: Herd? 


required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") 
} 


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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell 

    cell.textLabel?.text = self.horse[indexPath.Row] 

    return cell 
} 

}

я ошибка на return self.horse.count, в которой указывается не член, а ошибка на self.horse[indexPath.Row], указывающая NSIndex, не имеет члена с именем row.

Я чувствую, что я не разворачиваю его должным образом или что-то в этом роде, но я не могу понять это или найти ответ в моих поисках. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать и заблаговременно за любую помощь.

+0

изменения '' self.horse.count' к self.horse?.count ?? 0' и 'self.horse [indexPath.Row]' to 'self.horse? [IndexPath.row]'. – bluedome

+0

Является ли 'Herd' подклассом Array? Или у вас есть свойство 'count', которое вы внедрили? Ошибки говорят вам, что XCode не находит эти свойства в экземпляре 'Herd'' self.horse'. Речь идет не о optionals (ноль или нет), а о пользовательском Type 'Herd', который не имеет значений, о которых вы просите. Немного сложно понять, почему деталь viewController имеет 2-й вид таблицы и ожидает «Herd», если вы передаете только один ряд лошадей из предыдущего представления. – mc01

+0

@bluedome Спасибо за ваш ответ, я сделал ваши предложенные изменения: по счету я получаю, что у Херда нет члена с именем count по индексу, который я получаю. У Херда нет члена с индексом. –

ответ

0

осветляющие ...

Вы правильно захватить self.horses[horseIndex] в методе SEGUE, так что вы уже сделали работу, чтобы получить 1 конкретную лошадь. Нет необходимости делать это снова. Есть self.horses связанный с Herd типа? Сбив с толку, почему Herd снова появляется в DetailView - вам это, похоже, не нужно.

Похоже на то, что вы на самом деле хотите в этот момент, является табличным расположением деталей этого одиночного лошади ... Правильно? Как переход из всего списка «Контакты» в табличный вид одного контакта?

Это больше не включает в себя множество нескольких лошадей, поэтому вам не нужны Herd? и herd.count. Используйте статические метки или статический tableView для отображения информации с 1 лошади.

ЧТО ВАША СТРУКТУРА ДАННЫХ & ЧТО ПРОИСХОДИТ ВИДЕО?

Предположительно, что вы хотите создать (если вы еще не сделали) является Horse Тип:

class Horse { 
     //you could use optional properties here, or require them for a fully initialized Horse. 
     let name:String? 
     let gender:String? 
     let breed:String? 
     var age:Int? 
     var restingHeartRate:Int? 

     init(name:String?, gender:String?, breed:String?, age:Int?, restingHeartRate:Int?) { 
     //set arguments passed in to respective properties of self... 
     } 

     func winTripleCrown() { 
     println("\(name!) Wins! Suck on that, Sea Biscuit!") 
     } 
    } 

Убедитесь, что ваш horses массив объявляется принимать только Horse экземпляры, и заполнить его соответствующим образом:

var horses = [Horse]() 
let horse1 = Horse(name:"Bob" gender:"male" breed: "Yessir, I am a real horse" age:42 restingHeartRate: 30) 
horses.append(horse1) 
println(horses.count) //prints "1" 
horses[0].winTripleCrown() //prints: "Bob Wins! Suck on that, Sea Biscuit!" 

Используйте Horse Тип вместо Herd в DetailViewController:

var horse: Horse? //nil until set in prepareForSegue 

Затем в методе SEGUE:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    ... 
    detailsViewController.horse = selectedHorse 

Теперь, если вы только положить правильно созданный Horse экземпляров в исходный массив, и есть один на SelectedIndex, вы гарантированы, что horse переменных DetailViewController - это экземпляр Horse и что он выбран в первом «общем» tableView.

создать Детальный вид

ЛЕГКО: Простое решение в этой точке, чтобы создать макет DetailView с этикетками, изображения, и т.д., и подключить их к @ свойств в DetailViewController. Затем сопоставьте свойства Horse с @IBOutlets. Готово. Не нужно больше беспорядок w/tableViews - просто подделайте его или используйте scrollView, чтобы он выглядел как таблица.

Tableview ROUTE Но если вы хотите использовать UITableView, то вы должны были бы методы делегата, как вы используете ... Разница в том, что вам нужно смотреть на # свойств единой Horse экземпляр - не что-нибудь об общем списке лошадей в Herd или общем массиве.

Вы МОГЛИ жесткий код на # строки, если вы уверены, # и порядок Horse свойств всегда будут соответствовать:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return 5 //1 row per property in a `Horse` instance as defined above 
} 

Однако, если вы хотите, чтобы учесть более динамичные результаты (например, массив выигрышей/потерь или фотогалерея переменной длины), вам нужно будет иметь достаточно клеток для отображения всех свойств лошади. Как вы можете сделать это с помощью настраиваемого типа, который не является массивом или словарем?

В Swift вы можете определить, сколько свойств имеет тип, создав "Mirror" type и используя его для самоанализа, чтобы отразить информацию, как у count, пропавшего без вести.

let horseMirror = reflect(self.horse) 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return self.horseMirror.count //should also return "5" but no longer hard-coded 
} 

А потом в cellForRowAtIndexPath: вы можете переключиться на indexPath назначить различные Horse свойства меток (или изображений, и т.д.) в клетках Tableview. Создание пользовательских типов Tableview ячеек ж/уникальных идентификаторов, если вы хотите, чтобы показать различную информацию, или вставить ж/встроенные опции:

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

    var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell 

    //haven't played w/this to see if the optionals are correct. Consider it psuedocode... 
    switch indexPath.row { 
     case 1: cell.textLabel.text = self.horse.name? 
     case 2: cell.textLabel.text = self.horse.gender? 
     case 3: cell.textLabel.text = self.horse.breed? 
     case 4: cell.textLabel.text = String(self.horse.age?) 
     case 5: cell.textLabel.text = String(self.horse.restingHeartRate?) 
     default: cell.textLabel.text = "" 
    } 

    return cell 
} 
+0

Святая корова, вы приложили много усилий в это, и я НЕ МОГУ ДОЛЖНО благодарить вас .... Я уже в пути! Опять же, спасибо тонну !!!! –

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