2017-02-22 5 views
0

Мне нужно скрыть или удалить статическую строку из TableView.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); 
    } 
} 

Но не работает, клетка продолжала в TableView.

Я стараюсь это:

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. Количество строк, содержащихся в существующем разделе после обновления (10) должно быть равно количеству строк, содержащихся в этом разделе перед обновлением (10), плюс или минус количество строк, вставленных или удаленных из этого раздела (вставлено 0, 1 удалено) » – Lnacer

+0

Я попытался использовать ViewDidLayoutSubviews(), какой метод следует ли пытаться использовать? ViewWillAppear()? – Lnacer

+0

Да «ViewWillAppear()», возможно, является более практичным решением, так как теоретически оно возникает только один раз при инициализации UIViewController. Сообщение об ошибке, которое вы получаете, связано с тем, что вы не удаляете какие-либо элементы из источника tableviews. Просто потому, что они являются статическими, это не означает, что вы не можете удалить и повторно добавить их из источника Tableviews. Если нет конкретной причины, по которой вы не хотите этого делать. – Digitalsa1nt

Смежные вопросы