2010-12-03 23 views
0

我有從中我創建包含的UITextField定製單元的繼承的UITableViewCell類。高度繼承的類時的UITextField接收焦點

默認情況下,UITextField的像素高度爲25。

我想要的行爲是,當用戶點擊文本字段,給出UITextField應更改爲100像素高度和小區應該相應增長。

我可以檢測到UITextField何時收到焦點感謝通知和觀察員,但我不知道如何以編程方式使該tableView:HeightForCellAtindexPath:被調用。

回答

1

您必須在單元格和表格視圖控制器之間有鏈接。由於您已經在控制器中創建自定義單元格,因此最簡單的方法是使用委託模式。

@class CustomTableViewCell; 

@protocol CustomTableViewCellDelegate 
- (void)customTableViewCellDidEnterTextMode:(CustomTableViewCell *)cell; 
@end 

@protocol (nonatomic, assign) id<CustomTableViewCellDelegate> delegate; 

並調用委託方法當文本字段獲得焦點

[self.delegate customTableViewCellDidEnterTextMode:self]; 

,並在控制器

- (void)customTableViewCellDidEnterTextMode:(CustomTableViewCell *)cell { 
    self.editingIndexPath = [self.tableView indexPathForCell:cell]; 
    // from Jablair's answer 
    [tableView beginUpdates]; 
    [tableView endUpdates]; 
} 

然後在tableView:heightForCellAtIndexPath:只是返回你的特殊的高度你在哪裏檢測爲self.editingIndexPath

你可能必須包括另一個委託方法當焦點離開文本字段,以及知道。

另一種方法是使用的通知,但將只是複雜的代碼,如果只有一個消息的接收器的代表是首選的方式。第三種方法是將文本字段的代表設置爲您的控制器而不是您的單元格。

底線,您需要提供單元格和表格之間的鏈接查看您的自我,我相信使用委託模式是最好的方法。

+0

由於同一個單元實例用於多行,這將如何工作? – VdesmedT 2010-12-03 22:14:16

1

當表視圖加載數據時調用tableView:heightForCellAtIndexPath:方法,因此只需在表視圖上調用reloadData(或其他更具選擇性的重新裝入方法之一)應該可以正常工作。

+0

我不從細胞內具有對任何的UITableView參考,這樣的解決辦法逼我連線的tableView及其細胞...犛牛之間的委託!謝謝你。 – VdesmedT 2010-12-03 16:16:18

2

像地方性說,tableView:heightForCellAtIndexPath:是需要實現的方法。根據Apple的說法,觸發調整大小的最有效方法是像這樣的一個空的塊。

[tableView beginUpdates]; 
[tableView endUpdates]; 

這樣可以節省你重裝單元格內容的開銷,我相信,給你一個漂亮的動畫否則你不會從reloadData得到。

+0

但是,我將如何連線發生在UITableViewCell繼承類和那段代碼中的事件?是什麼屬性或方法,我可以設置/調用單元格,將引發一個事件在tableViewController中被解僱? – VdesmedT 2010-12-03 16:24:15