2012-05-31 100 views
4

我試圖想出一個很好的(在編碼&外觀)從表視圖刪除一節的方式。理想情況下,我想創建一種刪除與刪除UITableViewCell(即按下時顯示紅色刪除按鈕的紅色減號按鈕)相似的部分的方法。如何從UITableView(iPhone/iPad)刪除部分

這個問題是否有預先存在的解決方案?我嘗試了一些研究,但我真的找不到任何有用的東西。如果沒有預先存在的解決方案,我認爲我可以嘗試並實施一個解決方案。我的計劃是爲每個部分創建一個自定義標題。在自定義標題中,我會添加刪除按鈕,這些按鈕的作用與刪除行時的方式相同。人們認爲這會起作用嗎?

所以要清楚,我在問是否存在刪除UITableView中的部分的現有解決方案。如果沒有,我想知道人們是否認爲我的想法是可行的,或者是否有任何我忽略的問題。

在此先感謝。

回答

8

實現自己headerView是要走的路。 Apple不提供用於刪除部分的內置用戶界面。如果你拉下iOS設備的通知區域,你會明白如何使它看起來不錯。

實現也不是很複雜。我使用的是這樣的:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    return 21.0f; 
} 

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 21)]; 
    headerView.backgroundColor = [UIColor lightGrayColor]; 

    UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(8, 0, 250, 21)]; 
    headerLabel.text = [NSString stringWithFormat:@"Section %d", section]; 
    headerLabel.font = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]]; 
    headerLabel.textColor = [UIColor whiteColor]; 
    headerLabel.backgroundColor = [UIColor lightGrayColor]; 
    [headerView addSubview:headerLabel]; 

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    button.tag = section + 1000; 
    button.frame = CGRectMake(300, 2, 17, 17); 
    [button setImage:[UIImage imageNamed:@"31-circle-x"] forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(deleteButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [headerView addSubview:button]; 
    return headerView; 
} 

- (IBAction)deleteButtonPressed:(UIButton *)sender { 
    NSInteger section = sender.tag - 1000; 
    [self.objects removeObjectAtIndex:section]; 
    [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:UITableViewRowAnimationAutomatic]; 

    // reload sections to get the new titles and tags 
    NSInteger sectionCount = [self.objects count]; 
    NSIndexSet *indexes = [NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(0, sectionCount)]; 
    [self.tableView reloadSections:indexes withRowAnimation:UITableViewRowAnimationNone]; 
} 

enter image description here

+0

這裏是什麼self.objects? –

5

是存在可用於刪除tableview.You部分可以使用以下方法現有的方法:

[m_TableView beginUpdates]; 
[m_TableView deleteSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationTop]; 
[m_TableView endUpdates]; 

但你必須保持一件事記住,當你刪除部分你必須修改:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 

因爲現在你的節數由1

1

減少如果我是正確的,蘋果只提供行中的UITableView編輯模式下刪除。

我能想出3種添加按鈕的方法來刪除特定的部分。

首先,除了一段UITableView之外還放了一個按鈕,它不在UITableView之內(我不認爲你可以在UITableView之內加上一個按鈕,或者你可以但不用不知道該怎麼做)。您可以檢查UITableView是否處於可編輯模式,並相應地顯示或隱藏您的按鈕。

Seond,如果您確實想要UITableView中的刪除按鈕,您可以創建cuntom UITableViewCell並將單元格中的部分刪除按鈕。這樣你每個UITableViewCell都會有一個按鈕,這並不是很棒。

第三選擇不會提供任何按鈕,只是讓用戶以Apple默認方式刪除單元格。你所做的只是跟蹤你的數組中剩下多少個用於填充該部分的對象。如果計數達到0,則刪除該部分。

這是我之前沒有做類似的事情:

我有一個NSMutableArray firstLevelArray裏面包含每個包含一些對象幾個NSMutableArray secondLevelArray的。因此,每個secondLevelArray將爲一個節提供數據,secondLevelArray中的對象將爲每個單元提供數據。在- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView,我做return [firstLevelArray count];何地,只要我想刪除某個部分,[firstLevelArray removeObjectAtIndex:someIndex]後,我做[myTableView reloadData]

希望這有助於