2015-11-13 64 views
0

所以,这是我的问题:iOS Swift - 是否有将子视图添加到表格单元格并将其正确定位的方法?

我想创建一个表来显示一些航班数据。这个想法是,每个单元格代表一次旅行(即从城市A到B所需的所有航班)。每个航班有3个属性,我将分成不同的标签,组成线路。因此,细胞必须相应地调整其高度。

这是I`ve迄今所做的:

我的视图控制器类:

@IBOutlet weak var dispTable: UITableView! 
override func viewDidLoad() { 
    super.viewDidLoad() 

    dispTable.dataSource = self 
    dispTable.delegate = self 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    if let cell = tableView.dequeueReusableCellWithIdentifier("DispCell") as? DispTableViewCell { 
     let flight1: Flight = Flight() 
     let flight2: Flight = Flight() 
     curFlightsIda = [Flight]() 
     Flight1.Num = "1221" 
     Flight2.Num = "1331" 

     curFlightsIda.append(Flight1) 
     curFlightsIda.append(Flight2) 

     for voo in curFlightsIda { 
      let lbl = UILabel(frame: CGRectMake(0, 0, 100, 50)) 
      lbl.textAlignment = NSTextAlignment.Center 
      lbl.text = voo.Num 
      cell.contentView.addSubview(lbl) 
     } 

     return cell 
    } else { 
     return DispTableViewCell() 
    } 
} 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return 100 
} 

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return UITableViewAutomaticDimension 
} 

的flight.num存在只是为了测试。我能够以编程方式创建标签,但我觉得我的方式正常工作。m going, the layout won

那么,我该如何创建代表行的标签并将它们正确放置?我在正确的轨道上吗?我搜索了四周,发现了XIB,但我不确定它是否更好..?老实说,我完全失去了,任何帮助将深表谢意。

我真的不知道这会有所帮助,但它会是这样的:

TRIP CELL:

Flight1Num Flight1Departure Flight1Duration

Flight2Num Flight2Departure Flight2Duration

Flight3Num Flight3Departure Flight3Duration

+1

您应该使用自动布局。 – dasdom

回答

0

不要。

为什么:

的cellForRowAtIndexPath被调用的每一个细胞(也滚动时)。如果您尝试做得太多,它将不会顺利滚动。此外,单元重用(因为出列表示它)。 iOS仅创建可见单元格实例的数量加上一个或两个额外的单元格。如果一个单元格被重用,你需要删除已经添加的标签,然后再添加导致下一个问题的新标签:如何识别它们(要么搜索所有子视图并检查它是否是UILabel的实例,要么使用标签并通过标签找到他们....反正:如果你正在尝试做的太多了,它不会滚动顺畅

相反:

模板中的单元格“定义标签DispCell '或在故事板中创建不同的模板单元格(并按名称将正确的单元格出列)。您可以使用故事板布局约束条件来正确定位标签。

如果您有一个灵活的curFlightsIda数量,您可以考虑最大数量(并隐藏空标签),或者可以使用文本字段而不是标签。

+0

感谢您的解释!我怀疑这不是最好的方法...那么你是说我应该创建一个自定义单元格,并准备好六条航线,并根据当前航程中的航班数量显示必要的元素? 而使用文本字段而不是标签有什么区别? – Yurigm

+0

这取决于设计,但是:只需要一个准备好的单元格模板。您也可以使用文本字段,但默认情况下是可编辑的。一个标签是只读的(所以选择需要的)。 – theguy

相关问题