使用swift中的多个单元以编程方式创建TableView

时间:2016-09-08 10:22:21

标签: ios swift uitableview tableview programmatically-created

因为我用多个单元格以编程方式创建一个TableView,并且在每个单元格中都有UICollectionView,UITableView,UITableView ....但我无法找到错误,每次运行程序时都会显示 "由于信号命令失败:分段错误:11"。

是否有人使用编码创建了这种类型的UI。

Swift中的新功能,请原谅错误。UI of the App

//  ViewController.swift
//  Json Parsing in Swift
//

import UIKit
import Alamofire
import SwiftyJSON

class ViewController: UITableViewController {


var dataArray = Array<JSON>()


override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

Alamofire.request(.GET, "http://104.131.162.14:3033/api/ios/detail").validate().responseJSON { response in
switch response.result {
case .Success:
if let value = response.result.value {
let json = JSON(value)
print("JSON: \(json)")

var trafficJson = json["traffic_partners"]
trafficJson["type"] = "Traffic"
self.dataArray.append(trafficJson)

var newsJson = json["news"]
newsJson["type"] = "News"
self.dataArray.append(newsJson)


var categoryJson = json["category"]
categoryJson["type"] = "Category"
self.dataArray.append(categoryJson)


var topFreeApps = json["top_free_apps"]
topFreeApps["type"] = "TopApps"
self.dataArray.append(topFreeApps)


var topSites = json["top_sites"]
topSites["type"] = "TopSites"
self.dataArray.append(topSites)


var trendingVideos = json["tranding_video"]
trendingVideos["type"] = "TrendingVideos"
self.dataArray.append(trendingVideos)


var sports = json["sports"]
sports["type"] = "Sports"
self.dataArray.append(sports)


var jokes = json["jokes"]
jokes["type"] = "jokes"
self.dataArray.append(jokes)

print(self.dataArray[0]["detail"][0].object)
print(self.dataArray[2]["detail"].object)

self.tableView.reloadData()

}
case .Failure(let error):
print(error)
}
}

tableView.registerClass(MyCell.self, forCellReuseIdentifier: "cellId")
}


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataArray.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let myCell = tableView.dequeueReusableCellWithIdentifier("cellId", forIndexPath: indexPath) as! MyCell
myCell.nameLabel.text = dataArray[indexPath.row]["type"].string
if (dataArray[indexPath.row]["type"].string == "News") {
myCell.newsArray = dataArray[indexPath.row]["detail"].arrayObject

}

myCell.myTableViewController = self
return myCell
}


}


class MyCell: UITableViewCell {

var newsArray :NSMutableArray=[]

var myTableViewController: ViewController?


override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)

setupViews()
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

let newsTableView: UITableView = {
let newsTV = UITableView(frame:UIScreen.mainScreen().bounds, style: UITableViewStyle.Plain)
newsTV.registerClass(NewsTableViewCell.self, forCellReuseIdentifier: "NewsTableViewCell")

return newsTV
}()

func tableView(newsTableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return newsArray.count
}

func tableView(newsTableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let myCell = newsTableView.dequeueReusableCellWithIdentifier("cellId", forIndexPath: indexPath) as! NewsTableViewCell
myCell.nameLabel.text = newsArray[indexPath.row]["title"].string
myCell.myTableViewController = myTableViewController
return myCell
}

let nameLabel: UILabel = {
let label = UILabel()
label.text = "Sample Item"
label.translatesAutoresizingMaskIntoConstraints = false
label.font = UIFont.boldSystemFontOfSize(14)
return label
}()

func setupViews() {
addSubview(newsTableView)
addSubview(nameLabel)

addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": nameLabel]))
addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": newsTableView]))

}

func handleAction() {

}

}

0 个答案:

没有答案