さまざまなビューにデータを表示するために使用されるシングルトン クラスがあります。
行の削除/挿入に使用される TableView が 1 つあります。編集を許可するために編集/完了の間で変化するボタンがあります。「streams は Singleton クラス内の変数です」
- (void)setEditing:(BOOL)flag animated:(BOOL)animated{
int count = [streams count];
UITableView *tableView = (UITableView *)self.view;
NSArray *topIndexPath = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:count inSection:0]];
if (self.editing == YES)
{NSLog(@"EDITING");
[tableView insertRowsAtIndexPaths:topIndexPath withRowAnimation:UITableViewRowAnimationBottom];}
else{NSLog(@"NOT EDITING");
[tableView deleteRowsAtIndexPaths:topIndexPath withRowAnimation:UITableViewRowAnimationBottom];}
}
そして、editingStyleForRowAtIndexPath を使用して、各行に使用する編集スタイルを選択できるようにします。
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
int count = [streams count];
int row = indexPath.row ;
if (row == count)
return UITableViewCellEditingStyleInsert;
else
return UITableViewCellEditingStyleDelete;}
編集モードのときに、 cellForRowAtIndexPath を使用して、「電話番号を追加」というテキストを含む追加の行を作成します。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *DeleteMeCellIdentifier = @"AudioCellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
DeleteMeCellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:DeleteMeCellIdentifier] autorelease];
}
int x = indexPath.row;
if (self.editing == YES)
{
if (indexPath.row == [streams count])
cell.textLabel.text = @"Add Phone Number";
else
cell.textLabel.text = [self.streams objectAtIndex:indexPath.row];
}
else
{
cell.textLabel.text = [self.streams objectAtIndex:indexPath.row];
}
return cell;}
行の削除は正常に機能します。行の挿入を選択すると、別のビューがスタックにプッシュされます。このビューから、作成したばかりの新しい行にラベルを付けるための多数のテキスト オプションがユーザーに与えられます。次のコードは、選択が行われた後にシングルトン クラスを更新するために使用されます。
- (void)viewWillDisappear:(BOOL)animated {
Disc *disc = [Disc sharedDisc];
[disc.streams insertObject:@"0208" atIndex:0];
[super viewDidAppear:animated];}
行のテキストが選択されたら、戻るボタンを選択して前の TableView に戻る必要があります。ここで問題が発生します。メインの TableView には、「電話番号を追加」というラベルの付いた 1 つのオプションの代わりに、2 つのオプションがあります。
TableView が使用しているシングルトン クラスが更新されていることはわかっています。正しい方法で更新されないのは TableView です。その後、編集/完了を切り替えると、tableView に情報が正しく表示されます。
ViewDidLoad および ViewWillAppear メソッドでシングルトン クラスを更新しようとしましたが、結果は同じで、ビューが初めてリロードされたときに、新しい行が正しく表示されません。
「戻る」BarButton をオーバーライドして、TableView が正しく表示されるようにすることを考えました。