【问题标题】:Using struct to create detail view controller from tableview使用 struct 从 tableview 创建详细视图控制器
【发布时间】:2016-08-07 17:40:06
【问题描述】:

首先,我是初学者!所以它有点复杂,但基本上我正在尝试创建一个单独的视图控制器,它显示带有对象的struct/string 中保存的信息。我正在制作一个目录。我有两个控制器,一个用于tableView(称为DirectoryTableViewController),一个用于详细视图(称为FacultyViewController),然后我有一个管理字符串的快速文件(称为人员)。 我最终会在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
  }
}

再次感谢!

【问题讨论】:

  • 没有收到您的问题。

标签: ios arrays swift uitableview struct


【解决方案1】:

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

导入基础

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)
    }
}

然后你通过这个方法进入一个选定老师的详细视图控制器:

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

【讨论】:

  • 我理解这段代码,但我很困惑在哪里添加它。我应该用这个替换我当前的代码还是添加它?
  • 如果您觉得这很容易理解,您可以替换您的代码,但需要更多详细信息。 1)制作一个模型 2)制作一个视图控制器,以便您可以接受该 VC 中的教师详细信息 3)最后制作一个 tableviewcontroller 以便您可以列出条目..希望你明白了
  • 对不起,我是初学者,我还在学习。当您提到制作模型时,您的意思是制作一个单独的 swift 文件以供参考吗?
  • 好的,我已经更新了我的问题中的代码(上图)。我在代码 var 数组行中收到错误“'People' 类型的值没有成员 'teacher String”:[People]!在 DirectoryTableViewController 中覆盖 func viewDidLoad() { super.viewDidLoad() print(array) }
  • 我想因为你没有在你的模型中声明教师字符串,你能分享你的代码以便更好地理解你的问题..
猜你喜欢
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多