2015-11-13 26 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

相關問題