2012-11-14 37 views
0

Having a UITextField in a UITableViewCell在UITableViewCell內部安裝UITextField沒有硬編碼文本框的框架?

我使用表格視圖使填充出表格(名,中間初始化,姓)和要嵌入文本字段在我的一些細胞。我看到很多關於在UITableViewCell中添加UITextField的例子,就像上面那樣。但是所有的人都硬編碼值的文本字段的邊框,這樣

UITextField *playerTextField = [[UITextField alloc] initWithFrame:CGRectMake(110, 10, 185, 30)]; 

我希望我的文本字段使用電池的框架或邊界。

爲了讓事情更有趣,我的表格視圖有四個部分,只有部分1(其中有3行)將嵌入文本字段。

爲了讓事情更有趣,我使用彈出控制器來呈現我的表單。

那麼,如何在我的表格視圖單元格內嵌入我的文本字段,而無需在設置其框架或邊界時使用硬編碼值?

謝謝!

回答

5

自動調整口罩是你的朋友。

cell = [tableView dequeueReusableCellWithIdentifier:@"identifier"]; 
CGFloat optionalRightMargin = 10.0; 
CGFloat optionalBottomMargin = 10.0; 
UITextField *playerTextField = [[UITextField alloc] initWithFrame:CGRectMake(110, 10, cell.contentView.frame.size.width - 110 - optionalRightMargin, cell.contentView.frame.size.height - 10 - optionalBottomMargin)]; 
playerTextField.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
[cell.contentView addSubview:playerTextField]; 
+0

儘管您仍然在CGRectMake()調用中使用硬編碼值。我不想有任何硬編碼的值! –

+0

只要你喜歡,你可以改變參數到CGRectMake(),並且在大多數情況下,如果你想有空間在單元格中放置其他東西,你將需要某種常量。重點是,確保寬度和高度相對於包含超級視圖,並將自動確認屏蔽設置爲「UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight'。 –

+0

我把這個答案與上面的答案結合起來得到我想要的。謝謝! –

2

如果你想確保UITextField填充細胞的contentView,那麼你做的事:

cell = [tableView dequeue....]; 
if (!cell) { 
    cell = ... // create cell 
    UITextField *textField = [[UITextField alloc] initWithFrame:cell.contentView.bounds]; 
    textField.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    [cell.contentView addSubview:textField]; 
} 

顯然,這需要額外的電池設置和一些應設置爲文本字段的委託。但是這涵蓋了獲取文本字段以填充單元格contentView的基礎知識。如果單元格的大小發生變化,文本字段將隨之更改。

+0

這幾乎工作。我可以在表格視圖單元格內輸入內容,但它不是居中的,也就是說,沒有上邊距。此外,我的文本字段中包含佔位符文本,並且使用此方法時,我看不到文本,我在所提供的其他答案中看到了這些文本。我正在將我的表格(具有表格視圖)作爲彈出窗口來呈現,這會使事情變得複雜嗎? –

+0

好吧,我重寫了我的代碼,現在可以看到文本字段佔位符文本,所以這是我的不好。但是,文本字段仍然不在表格單元中居中,但現在我可以通過添加偏移量來解決這個問題。所以本質上,答案是這個答案和下面答案的組合。謝謝! –

0

您可以通過創建一個自定義的筆尖,你那麼的cellForRowAtIndexPath引用

假設你的目標的iOS5 +,這是很容易做到用故事板編輯器映射出來。

  1. 設置在viewDidLoad中筆尖與下列
[self.tableView registerNib:[UINib nibWithNibName:@"nibname" bundle:nil] forCellReuseIdentifier:<#(NSString *)#>] 
中的cellForRowAtIndexPath
CellClass *cell = [tableView dequeueReusableCellWithIdentifier:<#(NSString *)#>]; 
  • 負載筆尖
  • 其中CellClass是您爲單元格創建的類。

    此方法允許很多靈活性來定製單元格以及創建特定於單元格的方法。 (如果你在tableView中使用多個單元格模板)。

    +0

    我沒有使用,也不想使用故事板。謝謝! –

    +0

    我很好奇爲什麼......沒有什麼優勢? – sberley

    +0

    當我與這個項目合作時,我從來沒有使用與故事板版本控制的好運氣。 –