2012-01-25 50 views
13

我試圖利用新的故事板設計器和易於繪製UITableView單元而不是編程「設計」每一行。iPhone-如何使用自定義UITableView單元格和CellWithIdentifier故事板

的標準單元的一個很好的例子在這裏掛在堆棧溢出: iPhone - dequeueReusableCellWithIdentifier usage

而不是使用的連接方法「[電池爲textLabel]」我想用在上面我自己的標籤,按鈕和圖像每行。 因此我創建了多個原型單元格/行併爲它們分配了標識符(使用Storyboard)。

現在:訪問每行「自定義」控件/標籤的最明智方式是什麼?我試圖通過ID訪問它們,但沒有找到任何東西。 我的想法是應該沿着這條線的工作:

[[[cell subviews] getObjectByID:@"labelTime"] setText:@"Whatever"]; 

是我的API的期望完全錯誤或沒有我只是找到合適的API,沒有?

任何想法或建議?

回答

31

對於您在故事板中創建的每個新定製UITableViewCell,您都需要創建一個新的類文件,該文件實現UITableViewCell以將其鏈接到該文件。確保將您在故事板中佈置的新單元格內的所有控件映射到實例屬性。然後,您只需像使用正常出列一樣使用它:

YourTableViewCellClass *cell = (YourTableViewCellClass*)[tableView dequeueReusableCellWithIdentifier:@"YourCellIdentifierStringDefinedInStoryBoard"]; 
// then set the properties for the class. 
cell.labelTime = @"whatever"; 
+0

打我,這簡直就是簡單! –

+0

是的,我在一週前剛剛意識到這種用法,發現它非常好,很快。 – mservidio

+0

完美..感謝您的想法 –

8

有兩種方法可以獲取自定義子視圖。更簡單的方法是使用標籤。每個視圖都有一個tag屬性,它是一個整數。您可以在標記中設置標記,並在代碼中設置或獲取標記。您可以通過發送viewWithTag:到樹的根目錄來搜索具有給定標籤的視圖的視圖樹。因此,舉例來說,你可以給你的labelTime查看標籤57,並在代碼中,你會發現這樣的觀點:

UILabel *label = (UILabel *)[cell viewWithTag:57]; 

使用標籤的缺點是,你必須保持標籤號在你的筆尖和你的代碼之間同步。如果它們不同步,你會看到錯誤的視圖或者你會得到零(因爲你可以發送消息到零,系統不會給你一個錯誤,當這種情況發生)。不過,標籤非常方便,所以像這樣使用它們很常見。

另一種方法是爲每個自定義子視圖創建一個具有IBOutlet屬性的自定義子類UITableViewCell。您可以掛鉤的網點在筆尖子視圖,並通過在代碼中的屬性訪問子視圖:

MyTableViewCell *myCell = (MyTableViewCell *)cell; 
UILabel *label = cell.labelTime; 

這需要編寫大量更多的樣板比使用標籤,但它的優點是你會如果您的筆尖和您的代碼不同步,則會收到警告或錯誤(在編譯時或您第一次嘗試加載筆尖時)。

+1

如果有人試圖使用這種方法,請記住,很難理解viewWithTag:57的含義。子類化UITableViewCell要好得多。 –

6

不要像我一樣是一個doofus。 :)

確保您設置在標識符值屬性的自定義單元格的督察。在Identity Inspector中設置恢復ID是錯誤的方法,這正是我所做的。主要面對自己。

0

有關如何使用mservidio和rob描述的方法的更多實施細節,請查看this tutorial中的「設計我們自己的原型單元」部分。

相關問題