【发布时间】:2014-07-29 15:28:41
【问题描述】:
我在 main.storyboard 上放置了两个 Table View。然后我为它们创建了两个新的 .swift 类文件:VideoTableViewController 和 LinkTableViewController。我如何将两者联系起来?看起来我可能做错了,因为我读到我需要将委托链接到表视图所在的视图。我希望它链接到我为表视图创建的控制器。 我想要做的是并排有两个列表,一个带有视频链接,另一个带有网络链接。我已经有了数组中的数据。我只需要将这些数据放入适当的表格视图的单元格中。
我注意到我可以将 Table View Controller 拖放到情节提要上,但我不这么认为 是我想要的,因为这是一个完全不同的观点。我希望这些观点保持一致。
VideoTableViewController:
import Foundation
import UIKit
class VideoTableViewController: UITableViewController {
@IBOutlet weak var videoTable = UITableView()
var videos: [Video] = []
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
//disable header
tableView.contentInset = UIEdgeInsetsMake(-30, 0, -20, 0);
var cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier("Component") as UITableViewCell
if (cell == nil) {
cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "Component")
}
//cell.textLabel.text = "Baking Soda"
//cell.detailTextLabel.text = "1/2 cup"
return cell
}
override func numberOfSectionsInTableView(tableView: UITableView!) -> Int {
return 1
}
override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
}
override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
return self.videos.count
}
func setVideos(videos:[Video]) {
self.videos = videos
}
}
主视图控制器:
这会填充对象数组,然后将数组传递给适当的表控制器。
import UIKit
class ViewController: UIViewController {
//arrays to hold objects
var videos :[Video] = []
var links :[Link] = []
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.fillArrays()
//instantiate TableViewController
let videoTable = VideoTableViewController()
let linkTable = LinkTableViewController()
videoTable.setVideos(videos)
linkTable.setLinks(links)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func fillArrays() {
let file = File()
let path = "/Users/me/file.rtf"
if (file.exists(path)) { //if file exists
let read :String? = file.read(path) //read the file
let content :String = read! //get file content
let lines = content.componentsSeparatedByString("\n") //explode content on line breaks
var lineItem :[String] //to hold each item of line explode
for line in lines { //loop through lines
lineItem = line.componentsSeparatedByString(",") //explode line on commas
//instantiate an object for the line, initialize it, and append the object to its array
switch lineItem[0] {
case "L":
self.links += Link(image: lineItem[0], path: lineItem[1])
case "V":
var duration :Int = 100
self.videos += Video(image: lineItem[1], path: lineItem[2], title: lineItem[3], duration: duration)
default:
break
}
}
}
}
}
那么,我是不是搞错了?显然这是我正在做的一件奇怪的事情,因为我在谷歌上找不到太多直接的信息。
【问题讨论】:
-
通常您希望选择 MVC 风格的应用程序,其中视图控制器处理为其视图提供数据:developer.apple.com/library/ios/documentation/general/…。话虽如此,如果您尝试将表视图连接到特定类,则可以在界面生成器中更改它们的类。
-
你是说你只想要一个视图控制器来管理 2 个表视图?
标签: ios xcode uitableview swift