[英]Design cell from storyboard and programmatically insert rows to UITableView
[英]Adding rows to UITableView built from Storyboard
我有一個從Storyboard構建的靜態UITableView
,運行良好。 但是,我希望以編程方式從用戶定義的文件中填充第一個類別
簡單地說,我想遍歷數組中的所有字符串,並將它們添加為第一類行的單元格。 對於第二類,我有一系列溫和復雜的單元格(包含許多標簽,文本字段,按鈕和其他控件),在故事板中定義,我不想在代碼中重新創建。
據我所知,從故事板構建的UITableView
的默認行為是使用nib
文件作為隱式datasource
。 如果我使用自定義類作為datasource
,我的第二部分不起作用。 我想到了兩種可能的解決方法:
datasource
填充我的第一個類別,並將其余類別委托給nib
文件。 這可能嗎? 是否有一些方法以編程方式請求nib
填充我的UITableView
? datasource
。 這種方法的缺點是使我的第二類難以修改。 這兩種選擇中的一種是否可行? 還有其他選擇嗎?
使用Storyboard時有兩種表視圖:
你現在正在使用前者。 您可以在故事板中定義所有內容,並且只需很少的代碼。
但你需要改變后者。
您仍然可以將UITableViewCell
保留在Storyboard中; 沒有必要在代碼中執行此操作(盡管如果它可以使事情變得更容易)。 您可以使用“重用標識符”來引用模板單元格。
否則你幾乎得到了它。 您需要編寫代碼來實現數據源和(可能)表視圖委托的更多方法。
從靜態變為動態,它有點繁瑣。 我一直有意義提出雷達因為我確信Xcode可以讓它變得更容易......
我會使用動態原型單元格。 然后,我將ViewController
設置為delegate
和dataSource
。 然后,我將創建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.