使用struct从tableview创建详细视图控制器

时间:2016-08-07 17:40:07

标签: ios arrays swift uitableview struct

首先,我是初学者!所以它有点复杂,但基本上我正在尝试创建一个单独的视图控制器来显示struct/string中包含对象的信息。我正在制作一个目录。我有两个控制器,一个用于tableView(称为DirectoryTableViewController),另一个用于详细视图(称为FacultyViewController),然后我有一个swift文件(称为People)管理串。 我最终会在String添加姓名,电话,电子邮件和图片,但现在我只是在做名字。

我的问题是它正在工作,我需要一些指示。谢谢!

这是我的DirectoryTableView:

import UIKit

struct peoples {
  var teacherString: String!
  var image: UIImage!
}

class DirectoryTableViewController: UITableViewController {

  var detailViewController: DetailViewController? = nil
  var array : [People]!

  override func viewDidLoad() {
    super.viewDidLoad()
    print(array)
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
  }


  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("directoryCell", forIndexPath: indexPath)

    let person = array[indexPath.row]
    cell.textLabel!.text = person.teacherString



    return cell
  }

  override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {

  }
}

这是我的NewViewController:

import UIKit
class NewViewController: UIViewController {

  @IBOutlet weak var nameTextField: UITextField!
  @IBOutlet weak var phoneTextField: UITextField!
  @IBOutlet weak var emailTextTield: UITextField!
  var array : [People] = []

  override func viewDidLoad() {
    super.viewDidLoad()
  }

  @IBAction func crateObjectButton(sender: AnyObject) {

    let object = People(name: nameTextField.text! , phone: phoneTextField.text!, email: emailTextTield.text!)
    array.append(object)
    performSegueWithIdentifier("TeacherData", sender: self)
  }

  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "TeacherData" {
        let dvc =  segue.destinationViewController as? DirectoryTableViewController
        dvc!.array = array

    }
  }
}

这是People.swift(模特):

import Foundation

class People {
  var name : String
  var phone: String
  var email: String

  init(name: String, phone: String, email: String) {
    self.name = name
    self.phone = phone
    self.email = email
  }
}

再次感谢!

1 个答案:

答案 0 :(得分:0)

根据您的问题,您必须制作模型

导入基金会

class People {
    var name : String
    var phone: String
    var email: String

    init(name: String, phone: String, email: String) {
    self.name = name
    self.phone = phone
    self.email = email
    }
}

并创建一个视图控制器,从中收集所有这些细节,例如:像这样

import UIKit
class ViewController: UIViewController {

    @IBOutlet weak var nameTextField: UITextField!
    @IBOutlet weak var phoneTextField: UITextField!
    @IBOutlet weak var ageTextTield: UITextField!
    var array : [People] = []
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func crateObjectButton(sender: AnyObject) {

        let object = People(name: nameTextField.text! , phone: phoneTextField.text!, email: ageTextTield.text!)
        array.append(object)
        performSegueWithIdentifier("TeacherData", sender: self)  
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "TeacherData" {
            let dvc =  segue.destinationViewController as? TableviewController
               dvc!.array = array

        }
    }
}

这个segue将你带到tableviewcontroller,在viewdidLoad中我正在打印教师数组。

import UIKit
class TableviewController: UITableViewController {
    var array : [People]!
    override func viewDidLoad() {
        super.viewDidLoad()
        print(array)
    }
}

然后使用此方法转到所选教师的deatil视图控制器:

 override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        object =  array![indexPath.row]
        performSegueWithIdentifier("yourdetailviewcontrollersegue", sender: self) 
    }