2010-02-12 66 views
1

我目前正在嘗試使用分組的UITableView實現可編輯的細節視圖。我希望它看起來像聯繫人應用程序:UITableView中的可編輯tableHeaderView(如聯繫人應用程序)

  • 在查看狀態下,它應該將標題顯示爲普通標籤(在Contacts中它是帶有TRANSPARENT背景的名稱)。
  • 在編輯狀態下,它應該將頁眉顯示爲可編輯的UITableViewCell(在Contact的tableHeader?從純背景的純文本變爲帶有白色背景的標準UITableViewCell)。

我不太確定實現這個目標的最佳方法是什麼。首先,我試圖添加標題爲UILabel tableHeaderView(這很好用),但是我不能將它切換到UITableViewCell。在進入編輯模式時,可能會刪除標題並添加新的部分。

目前我試圖總是使用UITableViewCell並使其在查看模式下透明,並在編輯模式下將其切換爲默認值。但是,我還沒有能夠使UITableViewCell(UITableViewCellStyleDefault中的UILabel)透明(儘管我設法使UITableViewCell透明,但不是其中的textLabel)。

實現此行爲的最佳方法是什麼?

回答

1

我做這個太(雖然與變化中的iOS4的聯繫人應用程序一個有爭議的問題!)我的解決方案使用基於isEditing他們之間的兩個不同的標題意見和開關:

- (UIView *)infoHeaderAnimated:(BOOL)animated { 
    UIView *header = [[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 90.0)] autorelease]; 
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(98.0, 41.0, 221.0, 21.0)]; 
    label.font = [UIFont boldSystemFontOfSize:17.0]; 
    label.backgroundColor = [UIColor clearColor]; 
    label.text = baseEntity.labelText; 
    [header addSubview:label]; 
    [label release]; 
    return header; 
} 

- (UIView *)editingHeaderAnimated:(BOOL)animated { 
    UIView *header = [[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 90.0)] autorelease]; 
    UITableView *tv = [[UITableView alloc] initWithFrame:CGRectMake(78.0, 10.0, 240.0, 90.0) style:UITableViewStyleGrouped]; 
    tv.backgroundColor = [UIColor clearColor]; 
    tv.dataSource = self; 
    tv.delegate = self; 
    tv.rowHeight = 62.0; //@@@ height of cell and frame depend on elements 
    tv.tag = kEditingHeaderTag; 
    editingHeaderTableView = [tv retain]; 
    [header addSubview:tv]; 
[tv release]; 
    return header; 
} 
0

你所試圖做的是非常標準的,可以考慮在UITableViewDatasource實施這些協議,尤其是titleForHeaderInSection & commitEditingStyle:

Configuring a Table View 
– tableView:cellForRowAtIndexPath: required method 
– numberOfSectionsInTableView: 
– tableView:numberOfRowsInSection: required method 
– sectionIndexTitlesForTableView: 
– tableView:sectionForSectionIndexTitle:atIndex: 
– tableView:titleForHeaderInSection: 
– tableView:titleForFooterInSection: 

Inserting or Deleting Table Rows 
– tableView:commitEditingStyle:forRowAtIndexPath: 
– tableView:canEditRowAtIndexPath: 

記住要選擇你的TableView爲集團而不是平原類型界面生成器。

+0

謝謝您回答。但是,聯繫人應用程序似乎使用tableHeader而不是頂部視圖的sectionHeader,並將其更改爲編輯模式下的標準單元格。或者它使用透明的單元格,在編輯模式下切換到正常狀態。 – ComSubVie 2010-03-02 11:33:48

+0

啊,你在談論詳細查看一個聯繫人時,點擊修改?我認爲這裏沒有什麼特別的魔力,第一個標題是一個普通的tableview單元格,但是具有自定義樣式,它也設置了這個單元格的高度以使感覺不同,但事實上並非如此。 – 2010-03-02 11:57:25

相關問題