2015-06-03 4 views
0

Итак, в основном я хочу достичь этой формы таблицы, как показано в эскизе.Древовидная табличка в Swift

enter image description here

У меня есть MasterTableViewController с массивом имен людей. Когда пользователь выбирает Person 2, он затем представляет фрагмент этого человека 2 в детали, такие, как Имя, Возраст, Адрес и Статус.

Если так что пользователь видит, что и щелкает Назад кнопку, они могут выбрать другое лицо, а также просматривать их собственные данные, отличающиеся от Person 2.

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

ответ

1

Вы можете создать один класс, который хранит персоны данные, как это:

class People { 
var name: String? 
var age : Int? 
var location: String? 
var status: String? 

init(name: String, age: Int, location: String, status: String) { 

    self.name = name 
    self.age = age 
    self.location = location 
    self.status = status 
    } 
} 

После этого вы можете добавить данные таким образом:

func setUpPersons(){ 

    let person1 = People(name: "Anna", age: 20, location: "12312321", status: "Single") 
    let person2 = People(name: "John", age: 30, location: "12312321", status: "Single") 
    let person3 = People(name: "Leo", age: 30, location: "12312321", status: "Single") 
    let preson4 = People(name: "Dharmesh", age: 30, location: "12312321", status: "Single") 
    arrayOfPerson.append(person1) 
    arrayOfPerson.append(person2) 
    arrayOfPerson.append(person3) 
    arrayOfPerson.append(preson4) 
} 

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

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell") as! UITableViewCell 
    let person = arrayOfPerson[indexPath.row] 
    cell.textLabel?.text = person.name 
    return cell 
} 

Вы можете получить выбранный индекс ячейки таким образом:

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

    selectedIndex = indexPath.row 
} 

После этого вы можете передать данные с Segue таким образом:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if(segue.identifier == "yourIdentifierInStoryboard") { 

     var detailViewController = (segue.destinationViewController as! DetailViewController) 
     let person = arrayOfPerson[selectedIndex] 

     detailViewController.nameP = person.name! 
     detailViewController.ageP = person.age! 
     detailViewController.locationP = person.location! 
     detailViewController.statusP = person.status! 
    } 
} 

И таким образом, вы можете отобразить данные выбранного лица:

class DetailViewController: UIViewController { 

    @IBOutlet weak var name: UILabel! 
    @IBOutlet weak var age: UILabel! 
    @IBOutlet weak var location: UILabel! 
    @IBOutlet weak var status: UILabel! 

    var nameP = "" 
    var ageP = 0 
    var locationP = "" 
    var statusP = "" 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     println(nameP) 
     name.text = nameP 
     age.text = "\(ageP)" 
     location.text = locationP 
     status.text = statusP 
    } 

} 

HERE является ваш образец проекта.

+0

Огромное вам спасибо, именно то, что я хотел. знаю, что я должен понять путь из этого образца проекта о том, как добавлять имена и хранить их в массиве, а не жестко кодировать их. Большое спасибо Dharmesh Kheni :) – Amit

0

В основном, вы хотите добавить segue между MasterTableView и вашим DetailView, который запускается при нажатии на ячейку таблицы. Логика контроллера DetailView должна иметь name, age, location и status свойства, которые могут быть установлены в вашем контроллере MasterTableView в функции prepareForSegue.

См. Например, this.

+0

Да, я имею в виду, что знаю, что эти свойства принадлежат в DetailView, а как насчет данных MasterTableView для каждого из его лиц? Такие, как Person 2 или Person 4, каждая из этих ячеек должна иметь свои собственные данные, отличающиеся друг от друга. – Amit

+0

В массиве 'MasterTableView' хранится массив объектов' Person'. Оформить ссылку, которую я разместил. 'swiftblogs' в вашем случае будет содержать массив объектов' Person' вместо объектов String. – omoman

+0

Да, у меня также есть массив Person, который содержит список людей. Вот он: var People = ["Mark", "Brian", "Mike", "Nate", "Lee"]. Этот массив отображается в моем UITableViewController и при доступе к «Nate» ему нужно указать возраст Nate и все следующие данные, относящиеся к Nate. Я чувствую, что мне нужно добавить вложенные массивы элементов для Nate, чтобы они отображались в DetailsView, но я не знаю, как это сделать. – Amit

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