簡體   English   中英

將行添加到從Storyboard構建的UITableView

[英]Adding rows to UITableView built from Storyboard

我有一個從Storyboard構建的靜態UITableView ,運行良好。 但是,我希望以編程方式從用戶定義的文件中填充第一個類別

簡單地說,我想遍歷數組中的所有字符串,並將它們添加為第一類行的單元格。 對於第二類,我有一系列溫和復雜的單元格(包含許多標簽,文本字段,按鈕和其他控件),在故事板中定義,我不想在代碼中重新創建。

據我所知,從故事板構建的UITableView的默認行為是使用nib文件作為隱式datasource 如果我使用自定義類作為datasource ,我的第二部分不起作用。 我想到了兩種可能的解決方法:

  • datasource填充我的第一個類別,並將其余類別委托給nib文件。 這可能嗎? 是否有一些方法以編程方式請求nib填充我的UITableView
  • 將我的storyboard構建的單元格導出到代碼中並將此代碼粘貼到我的datasource 這種方法的缺點是使我的第二類難以修改。

這兩種選擇中的一種是否可行? 還有其他選擇嗎?

使用Storyboard時有兩種表視圖:

  • 靜態的
  • 動態

你現在正在使用前者。 您可以在故事板中定義所有內容,並且只需很少的代碼。

但你需要改變后者。

您仍然可以將UITableViewCell保留在Storyboard中; 沒有必要在代碼中執行此操作(盡管如果它可以使事情變得更容易)。 您可以使用“重用標識符”來引用模板單元格。

否則你幾乎得到了它。 您需要編寫代碼來實現數據源和(可能)表視圖委托的更多方法。

從靜態變為動態,它有點繁瑣。 我一直有意義提出雷達因為我確信Xcode可以讓它變得更容易......

我會使用動態原型單元格。 然后,我將ViewController設置為delegatedataSource 然后,我將創建UITableViewCell的自定義子類,並將第二部分的元素連接到自定義UITableViewCell中的IBOutlet

如果第一部分不是可以使用其中一種通用單元格類型完成的,那么我也會為該部分創建UITableViewCell的自定義子類。

然后我將使用cellForRowAtIndexPath:方法設置包含我想要的信息的單元格。 因此,如果我的第一部分使用FirstSectionCell而我的第二部分使用SecondSectionCell作為UITableViewCell自定義子類,我的cellForRowAtIndexPath:將如下所示:

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    if(indexPath.section==0)
    {
        FirstSectionCell *firstCell = [tableView dequeueReusableCellWithIdentifier:@"First Cell Prototype"];

        //Set up the first cell.

        return firstCell;
    } 
    else if(indexPath.section ==1)
    {
        SecondSectionCell *secondCell = [tableView dequeueReusableCellWithIdentifier:@"Second Cell Ptototype"];

        //Set up second cell.
        secondCell.someLabel.text = @"whatever";
        //etc.

        return secondCell;
    }
    else 
    {
        //if you have another section handle it here.
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM