- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
项目:https://github.com/vpags1/events.git
我需要将数据从 TableView 传递到 ViewController。数据显示在带有两个标签和 UIIMage(名称、详细信息、照片)的单元格上,单击该标签会将您带到另一个详细信息 View Controller ,该 Controller 显示信息。
我现在的情况是,数据存储在 View Controller 中的三个数组中,但是当我与教授交谈时,他告诉我,最简单的方法是将数据存储在单独的文件中。我真的不知道如何实现这一点,无论是方式还是其他方法,我都将不胜感激。
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var names = ["Brown Diner", "Kirkland", "Choco", "Lil Wayne", "Annie", "Social"]
var details = ["Free drink with meal after 12 AM", "LADIES drink free", "10% off all ice cream!", "concert", "a Theater Production", "Bring your Squad to the Social"]
var images = [UIImage(named: "brown"), UIImage(named: "kirk"), UIImage(named: "choco"), UIImage(named: "lilwayne"), UIImage(named: "default"), UIImage(named: "default")]
override func viewDidLoad() {
super.viewDidLoad()
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.eventsTable.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomCell
cell.name.text = names[indexPath.row]
cell.detail.text = details[indexPath.row]
cell.photo.image = images[indexPath.row]
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.names.count
}
//
// override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
//
// if segue.identifier == "detailsSegue" {
// guard let eventVC = segue.destinationViewController as? DetailsViewController,
// let eventIndex = tableView.indexPathForSelectedRow?.row else {
// return
// }
// eventVC.eventName = names[eventIndex]
// eventVC.eventDetail = details[eventIndex]
// eventVC.eventPhoto = images[eventIndex]
// }
//
// }
}
我的详细信息ViewController
import UIKit
class DetailsViewController : UIViewController {
@IBOutlet var detailsLabel: UILabel!
@IBOutlet var detailsImage: UIImageView!
@IBOutlet var detailsDesc: UILabel!
override func viewDidLoad() {
}
}
我的 CustomCell.swift 文件
import UIKit
class CustomCell: UITableViewCell {
@IBOutlet var photo: UIImageView!
@IBOutlet var name: UILabel!
@IBOutlet var detail: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
我对 Swift 非常陌生,事实证明它对我来说非常具有挑战性。我确实不是编码员,但是项目要求我完成我作为 UI/UIX 设计师的应用程序的一些编码。提前感谢您的帮助!
最佳答案
您可以使用数组中的数据创建一个 JSON 文件并将其添加到您的项目中:
{
"events":[
{
"name": "BTown Diner",
"details": "Free drink with meal after 12 AM",
"image": "btown"
},
{
"name": "Dunnkirk",
"details": "LADIES drink free",
"image": "dunn"
},
{
"name": "Chocolate Mousse",
"details": "10% off all ice cream!",
"image": "choco"
},
{
"name": "Lil Wayne",
"details": "Lil 500 concert",
"image": "lilwayne"
},
{
"name": "Annie",
"details": "an IU Theater Production",
"image": "default"
},
{
"name": "Campus Squad Social",
"details": "Bring your Squad to the Campus Squad Social",
"image": "default"
},
]
}
创建一个 Event
类来封装单个事件的数据:
import UIKit
class Event {
let name: String!
let details:String!
let image: UIImage!
init(eventData: [String: String])
{
self.name = eventData["name"]
self.details = eventData["details"]
self.image = UIImage(named: eventData["image"]!)
}
}
将事件类型的属性添加到您的DetailsViewController:
import UIKit
class DetailsViewController : UIViewController {
// To get the event from the main view controller
var event: Event!
@IBOutlet var detailsLabel: UILabel!
@IBOutlet var detailsImage: UIImageView!
@IBOutlet var detailsDesc: UILabel!
override func viewDidLoad() {
detailsLabel.text = event.name
detailsDesc.text = event.details
detailsImage.image = event.image
}
}
将类事件数组添加到主 ViewController读取 ViewDidLoad 中的 JSON 数据并填充您的 events
数组实现prepareForSegue并使用所选事件设置DetailsViewController的event
属性。
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet var tableView: UITableView!
// Created an Event class to store the event data
// Moved the hard coded data to Events.json
var events = [Event]()
override func viewDidLoad() {
super.viewDidLoad()
// Read the JSON data from main bundle
if let path = NSBundle.mainBundle().pathForResource("Events", ofType: "json") {
do {
let jsonData = try NSData(contentsOfFile: path, options: NSDataReadingOptions.DataReadingMappedIfSafe)
let parsedData = parseJSON(jsonData); // parse data to Swift dictionary
print(parsedData)
if let result = parsedData.result where parsedData.error == nil {
if let eventsData = result["events"] as? [[String : String]] {
for event in eventsData {
events.append(Event(eventData: event)) // Create an event from JSON data and add to the list
}
}
}
} catch {}
}
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return events.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomCell
cell.name.text = events[indexPath.row].name
cell.detail.text = events[indexPath.row].details
cell.photo.image = events[indexPath.row].image
return cell
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "detailsSegue" {
guard let eventVC = segue.destinationViewController as? DetailsViewController,
let eventIndex = tableView.indexPathForSelectedRow?.row else {
return
}
// set the event to detail view controller
eventVC.event = events[eventIndex]
}
}
// Standard JSON parsing code
func parseJSON(data: NSData) -> (result: [String : AnyObject]?, error: NSError?) {
var parsingError: NSError? = nil
let parsedResult: [String : AnyObject]?
do {
parsedResult = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments) as? [String : AnyObject]
} catch let error as NSError {
parsingError = error
parsedResult = nil
}
return (parsedResult, parsingError)
}
}
希望这有帮助!
关于swift - 将数据从 TableViewCell 标签传递到 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36611846/
我现在在另一个 ViewController 之上展示了一个几乎透明的 ViewController,但它禁用了与下面的 ViewController 的交互。这是我目前使用的代码: topContr
我有一个 View Controller ,其工具栏上有 3 个 UIButtons,可以打开一个新的 View Controller 作为弹出窗口。我在 Storyboard 中创建了 Segues
这个问题在这里已经有了答案: Delegates in swift? (15 个答案) 关闭 3 年前。 在我的场景中,我试图在关闭 View Controller 期间将值从 ViewContro
假设我有两个 viewController,AViewController 和 BViewController。 AViewController 嵌入在 NavigationController 中(
我有 3 个 View Controller A、B 和 C。 我在 vcA 上,我使用 推送 vcB [self.navigationController pushViewController:vc
我想知道如何在 VC3 和 VC1 之间传递数据。 我拥有的是 Root View (VC1)。然后你输入一个tableView,如果你选择一个项目,你将进入tableView2(VC3) - 类别
我在使用 Unwind Segue 时遇到问题。我有 3 个 ViewController,它们都在名为 ViewController.swift 的类下。我试图获取最后一个 ViewControll
我有一个应用程序,其左上角有一个汉堡菜单。按下时,菜单会以 90% 的不透明度淡入当前 ViewController,显示应用程序的主要导航选项。 我使用下面的代码从页面呈现 viewControll
我的问题是,当我呈现一个 UIViewController 时,呈现的 View 变黑了。 我有一个名为 mainViewController 的 UIViewController,它是我窗口的 Ro
例如,当我呈现UIActivityViewController或UIAlertController时,我仍然可以看到背景viewController,我不想在viewContollerA中嵌入view
我从second viewController进入了third viewController,但是我不想回到第二个viewController,我需要直接回到我的第一个viewController,我
我的应用程序是标签栏(+ 导航)应用程序。在 FirstViewController 中,我调用 onModalView。 -(void) onFilter { FilterViewControl
Photo Sharing 部分是我写的一个ViewController,当我按下正确的项目时,PhotoSharingViewController 会动画出现。 这是我的代码: PhotoShari
我正在尝试在另一个 View Controller 中使用 subview Controller 的应用程序。我有一个 VC,我正在实例化另一个 VC,并在外部 VC 内使用它自己的 xib。 我使用
我正在寻找有关包含 ViewController 的滚动的想法。我需要知道包含 View Controller 的位置。我已经尝试过 UIPageViewController 但我无法让滚动委托(de
我有一个带有嵌入式 NavigationController 的基本 ViewController 来提供工具栏。 ToolBar 有三个按钮,用于通过 segue 调用 ViewController
我的应用程序中的伙计们,我在应用程序委托(delegate)方法中有一些代码 application:didFinishLaunchingWithOptions:确定初始 View Controlle
我遇到了一个问题,我将对此进行描述,并且发现了一些类似的问题,但我认为与我的问题无关。 我有一个 UITabBarController,其中有 2 个用于 VC1 和 VC2 的选项卡。 VC1 转到
我的应用程序中有一个计时器。如果计时器达到 0,则用户将被带到失败页面。当这种情况发生时,之前的 ViewController 没有被关闭,导致更多的内存被占用。 如果出现失败页面,我希望关闭之前的
在问这个问题之前,我当然做了一些调查。我在 google 和 stackoverflow 上找到的链接或主题之一是: How do I load another view controller fro
我是一名优秀的程序员,十分优秀!