2010-10-27

iPhoneアプリ開発: 同じ UITableViewCell 上で Delete ボタンとプラスボタンを表示

UITableViewCellをフリックすると表示されるDeleteボタン(右図参照)と、セルの左端に表示される緑色のプラスボタン( UITableViewCellEditingStyleInsert のスタイル:下図参照)を、同じセル上で表示させる方法です(同時に表示させるわけではありません)。

サンプルのソースコードはこちら

以下解説です。
まずはテーブルの基本部分から。UITableViewControllerのサブクラス、またはUITableViewDataSourceデリゲート実装クラスのコードには最低限次のメソッドを実装する必要があります。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 5;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    static NSString *CellIdentifier = @"Cell";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    
 // Configure the cell.
 cell.textLabel.text = @"test";

    return cell;
}

上記のコードに、次のコードを加えると、Deleteボタンが表示されるようになります。
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
}

ここで、
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
 return UITableViewCellEditingStyleInsert;
}
をさらに加えると、Deleteボタンは表示されなくなります。
このメソッドでは、セルごとのUITableViewCellEditingStyleを決めています。

UITableViewCellEditingStyleDelete...
UITableViewCellEditingStyleInsert...

このメソッドを実装しない場合、デフォルトではUITableViewCellEditingStyleDeleteとして振る舞うようです(UITableViewCell.hを見ると、実際にはデフォルト値はUITableViewCellEditingStyleNoneになっているようですが)。

ということで、フリックして表示される Delete ボタンと、 セルの左に表示されるプラスボタン( UITableViewCellEditingStyleInsert のスタイル)は、通常は同時利用できません。

ただ、次のような工夫をすることで、同じセル上で Delete ボタンとプラスボタンを表示させることができます。
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
 return self.isEditing ? UITableViewCellEditingStyleInsert : UITableViewCellEditingStyleDelete;
}
このコードにより、通常時はフリックでDeleteボタンが表示され、ナビゲーションバー右端のEditボタンタップ時にはプラスボタンが表示されるようになります。

0 件のコメント: