2017-02-22 10 views
0

テーブルビューから静的な行を非表示または削除する必要があります。Xamarin.iOS - どのように非表示またはTableViewControllerから静的なセルを削除します。

私はいくつかの方法を試しましたが、何も機能しません。

私はこの試みた:

public override void ViewDidLayoutSubviews() 
{ 
    base.ViewDidLayoutSubviews(); 

    if (TableView.NumberOfRowsInSection(0) == 9) 
    { 
     TableView.CellAt(NSIndexPath.FromItemSection(0, 0)).RemoveFromSuperview(); 
     TableView.ReloadRows(new NSIndexPath[] { TableView.IndexPathForCell(TableView.CellAt(NSIndexPath.FromItemSection(0, 0))) }, UITableViewRowAnimation.Fade); 
    } 
} 

をしかし、動作しません、セルがテーブルビューで続けました。

私はこれ試してみてください。

public override void ViewDidLayoutSubviews() 
{ 
    base.ViewDidLayoutSubviews(); 

    if (TableView.NumberOfRowsInSection(0) == 9) 
    { 
     TableView.DeleteRows(new NSIndexPath[] { NSIndexPath.FromItemSection(0, 0) }, UITableViewRowAnimation.None); 
    } 
} 

をしかし、この例外がスローされます。

Foundation.MonoTouchException:Objective-Cの例外がスローされました。名前: NSInternalInconsistencyException理由:無効な更新:無効 セクション0の行数。更新(9)後に既存セクションの に含まれる行数は、更新前のセクションに含まれる 行の数と等しくなければなりません(9)、プラスまたはマイナス そのセクションからの挿入または削除された行の数(挿入0、 1は削除)、プラスまたはマイナス行数にまたはセクション(0における移動 の外に移動し、0が出て移動しました)。その後

、私はこれを試してみました:

public override void ViewDidLayoutSubviews() 
{ 
    base.ViewDidLayoutSubviews(); 

    if (TableView.NumberOfRowsInSection(0) == 9) 
    { 
     TableView.DataSource.CommitEditingStyle(TableView, UITableViewCellEditingStyle.Delete, NSIndexPath.FromItemSection(0, 0)); 
     TableView.DeleteRows(new NSIndexPath[] { NSIndexPath.FromItemSection(0, 0) }, UITableViewRowAnimation.None); 
    } 
} 

しかし、今、この例外がスローされます。

Foundation.MonoTouchException:Objective-Cの例外がスローされます。名前: NSInvalidArgumentException理由: - [DetalheContas のtableView:commitEditingStyle:forRowAtIndexPath:]:認識されていない セレクタは、私が何をするのインスタンスに0x7fd49590

を送りましたか?

答えて

0

これは何度も呼び出されるため、なぜViewDidLayoutSubviews()からテーブルビューからセルを削除しようとしているのかわからないので、そのセルがいつも存在するとは限りませんそれを除く。私はここがあなたが削除しようとしているセルであることを前提にしています。かかわらず、ここで私はあなたが上記の使用して見ることができる「フェード」のアニメーションを使用して、テーブルからセルを削除するためのサンプルコードスニペットです:

YourTableSource.ReplaceSource(SomeData); 

SomeTable.BeginUpdates(); 
SomeTable.DeleteRows(new NSIndexPath[] { NSIndexPath.FromItemSection(0, 0)}, UITableViewRowAnimation.Fade); 
SomeTable.EndUpdates(); 

あなたのソースのカウントは、削除の数によって異なっていなければならないことは注目に値しますあなたがコミットしていること。

+0

私は特定の条件でのみ表示する必要があるデータを持っています。覚えています:私は静的セルを使用しています。私はあなたの例を試しましたが、このエラーは "Foundation.MonoTouchException:Objective-C例外がスローされました"と表示されます。名前:NSInternalInconsistencyException理由:無効な更新:セクション0の行数が無効です。 (0が挿入され、1が削除されました) " – Lnacer

+0

私はViewDidLayoutSubviews()を試しましたが、どのメソッド私は使ってみるべきですか? ViewWillAppear()? – Lnacer

+0

はい、 'ViewWillAppear()'は理論的にはUIViewControllerの初期化ごとに1回しか発生しないので、おそらく実際的な解決策です。取得しているエラーメッセージは、テーブルビューソースから項目を削除していないためです。静的であるという理由だけで、Tableviewsソースから削除して再追加することはできません。あなたがこれをやりたくない特別な理由がない限り。 – Digitalsa1nt

関連する問題