2012-03-26 15 views
8

私はストーリーボードでxcode 4.2を使用してiphoneアプリを作成しています。iOSのUITableViewの下部にセルを追加します

右上の編集ボタンを押すと、既存の行を削除し、上部に緑の '+'アイコンが付いた余分なセルが表示され、追加することができます新しいセル。

私は、設定ボタンを

self.navigationItem.rightBarButtonItem = self.editButtonItem; 

を有効にして、私は私が必要と実現方法

- (void)tableView:(UITableView *)tableView commitEditingStyle: 
      (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath: 
        (NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     // removing a cell from my array and db here... 
    } 
    else if (editingStyle == UITableViewCellEditingStyleInsert) { 
     // adding a cell to my array and db here... 
    } 
} 

を実装しているCoreData

を使用してviewDidLoad方法に移入されている配列を持っています私は編集することができるいくつかの時点でセルを追加するが、どこに私はインターネット上の説明を見つけることができません私には明らかではありません。

答えて

18

[編集]ボタンをクリックすると、各行の横に削除コントロールが表示され、追加コントロールで新しい行が追加され、ユーザーが項目を右クリックして追加できるようになります?まず、編集ボタンの設定が既にあるので、編集モードで余分な行を表示するようにテーブルに指示します。ここ

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return self.editing ? a_recs.count + 1 : a_recs.count; 
} 

a_recs私はあなたがあなた自身の配列とのことを切り替える必要がありますので、私たちのレコードを格納するためのセットアップをした配列である:私達は私達のtableView:numberOfRowsInSectionであることを行います。次は、私たちは余分な行をどうするか、当社のtableView:cellForRowAtIndexPath:を伝える:

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.row == a_recs.count) 
     return UITableViewCellEditingStyleInsert; 
    else 
     return UITableViewCellEditingStyleDelete; 
} 

バター:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *CellIdentifier = @"Cell"; 
    BOOL b_addCell = (indexPath.row == a_recs.count); 
    if (b_addCell) // set identifier for add row 
     CellIdentifier = @"AddCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
     if (!b_addCell) { 
      cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
     } 
    } 

    if (b_addCell) 
     cell.textLabel.text = @"Add ..."; 
    else 
     cell.textLabel.text = [a_recs objectAtIndex:indexPath.row]; 

    return cell; 
} 

我々はまた、それが行を追加するために、我々は追加アイコンをしたいという私たちのテーブルに指示します。今すぐスーパー秘密のカンフー箸と一緒にすべてを保持しているソース:

-(void)setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 
    [self.tableView setEditing:editing animated:animated]; 
    if(editing) { 
     [self.tableView beginUpdates]; 
     [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:a_recs.count inSection:0]] withRowAnimation:UITableViewRowAnimationLeft]; 
     [self.tableView endUpdates];   
    } else { 
     [self.tableView beginUpdates]; 
     [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:a_recs.count inSection:0]] withRowAnimation:UITableViewRowAnimationLeft]; 
     [self.tableView endUpdates]; 
     // place here anything else to do when the done button is clicked 

    } 
} 

幸運とappetitボン!

+0

:)=)問題ありません! – ragamufin

+0

このメソッドを使用すると、私が追加したり削除したりしている挿入行は、削除するときに青い選択アイコンが右側に表示されます。行を削除する前に、テーブルを編集モードから外すことと関係しています。 'beginUpdates'呼び出しをtableViewの' setEditing'呼び出しの上に移動しようとしましたが、削除されずに行が追加されたときに青のアイコンが表示されます。どのように青い選択アイコンを避けるために任意のアイデア? – Ryan

+0

accessoryTypeがどこかに設定されているか、tableViewキューにキャッシュされているようです。セルを追加するときは、明示的にUITableViewCellAccessoryNoneに設定してみてください。 – ragamufin

4

This tutorialは読む価値があります。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

例えばを:それはのUITableViewの下部にあるのUITableView行の新しい行を追加」していますが、これはあなたの実装内であなたのUITableViewの上部に表示させることができるはずのセットアップ方法を示して

if(self.editing && indexPath.row == 1) 
{ 
    cell.text = @"Insert new row"; 
    ... 

関連する問題