Swift 4 - 填充tableview并将数组/字典数据传递给详细视图控制器

时间:2017-12-26 18:02:09

标签: ios swift uitableview

我首先要说的是,我到目前为止还不是开发人员。我是一名设计师,并试图整理一个工作原型。很抱歉,如果我提出的问题看起来很模糊,但我已经在这里搜索了YouTube教程和答案,但仍然感到难过。

我有一个视图控制器,里面有一个tableview。我试图用一系列信息填充表格。这是我坚持的第一个领域。我知道如何将单个数据点填充到单元格,而不是将多个数据填充到单元格。单元格应显示啤酒的名称,价格和简短描述,如附图中所示。这是我目前在BeverageViewController中的代码。此外," ipsum lorem"文本是我不想要显示的其他描述性文本,但我确实希望它传递给BeverageDetailsViewController,如果可能的话显示在那里。我不确定如何设置prepareForSegue或performSegue来引用所选行。

class BeveragesViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var BeveragesTableView: UITableView!

// Data
let beverages = [
    ("Coke", "2.00", "12 fl oz", "ipsum lorem"),
    ("Sprite", "2.00", "12 fl oz", "ipsum lorem"),
    ("Powerade", "2.00", "20 fl oz", "ipsum lorem"),
    ("Blue Moon", "2.00", "12 fl oz", "ipsum lorem"),
    ("Budweiser", "2.00", "12 fl oz", "ipsum lorem"),
    ("Bud Light", "2.00", "12 fl oz", "ipsum lorem"),
    ("Corona", "2.00", "12 fl oz", "ipsum lorem"),
    ("Dos Equis", "2.00", "12 fl oz", "ipsum lorem"),
    ("Fat Tire", "2.00", "12 fl oz", "ipsum lorem"),
    ("Heineken", "2.00", "12 fl oz", "ipsum lorem"),
    ("Red Stripe", "2.00", "12 fl oz", "ipsum lorem"),
    ("Stella Artois", "2.00", "12 fl oz", "Stella Artois Premium Lager"),
    ("Yuengling", "2.00", "12 fl oz", "ipsum lorem")]

override func viewDidLoad() {
    super.viewDidLoad()

    BeveragesTableView.delegate = self
    BeveragesTableView.dataSource = self
}


//Populate Table 
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return beverages.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell  = BeveragesTableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as UITableViewCell

    let beverage = beverages[indexPath.row]



    return cell!

}

UITableView

1 个答案:

答案 0 :(得分:3)

创建一个模型类,其中包含有关数据的信息 -

import UIKit


class Videos:NSObject{

    var title:String?
    var thumbNailImageView : String?
    var channel : String?
    var numberOfView : Int?
    var duration : Int?

    init(title:String,thumbNailImageView:String,numberOfView:Int,duration:Int,channel:String) {
        self.channel = channel
        self.title = title
        self.thumbNailImageView = thumbNailImageView
        self.duration = duration
        self.numberOfView = numberOfView

    }
}

控制器类 - :

这里我们制作类型数组 - > 模型类。之后将object附加到array。您可以fetch data server来执行loop objects输入多个import UIKit class ViewController: UIViewController { @IBOutlet weak var tableView: UITableView! var model = [Videos]() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. // Add object to array let object = Videos(title: "abc", thumbNailImageView: "adf", numberOfView: 1, duration: 2, channel: "cde"); model.append(object); } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } extension ViewController:UITableViewDelegate,UITableViewDataSource{ func numberOfSections(in tableView: UITableView) -> Int { return 1 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return model.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath); cell.textLabel?.text = model[indexPath.row].title return cell; } } 信息。

outlets

我刚刚给出了解决方法的示例。您可以创建自定义单元格类,根据需要放置所有必需的data,并按代码中所示提供dataSource

无需设置Delegate& viewdidLoad storyboard register如果已经从cell连接,viewDidLoad如果使用storyboardstidyverse library(dplyr) library(tidyr) df1 %>% separate_rows(csi) %>% group_by(x) %>% summarise(csi_max = max(csi)) %>% left_join(df1, .) # x csi csi_max #1 1 0.5, 6.7, 2.3 6.7 #2 2 9.5, 2.6, 1.1 9.5 #3 3 0.7, 2.3, 5.1 5.1 #4 4 4.1, 2.7, 4.7 4.7 pmax