Xamarin iOS UITableView,如何删除第一行?

时间:2015-11-04 14:37:58

标签: c# ios uitableview xamarin

我已经在我的应用程序中实现了限制为100条消息的聊天,因为性能,突然我发现,行编辑并不像我预期的那么容易。 所以我尝试了这个:

public void RemoveTopRow()
{
    messages.RemoveAt (0);
    tableView.ReloadData ();
}

但它因本机异常而崩溃,我没有就此而去试试这个:

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

但是,同样的结果:本机崩溃 enter image description here

也许有人知道该怎么做?小工作代码示例将非常有用,我保证,在我下次休假时,我会做一些重构并在github上发布这个聊天客户端,这样其他人就可以在没有UI痛苦的项目中实现它,因为我已经在这些布局修复上花费了太多时间和精力

2 个答案:

答案 0 :(得分:1)

如果没有看到你调用RemoveTopRow方法的位置,我只能猜测,但是从错误中,我假设你正在添加一个新的聊天行,并且在tableview / datasource完成同步之前删除FIFO堆栈中的第一个:

        public void RemoveTopRow()
        {
            dataSource.Objects.RemoveAt (0);
            TableView.ReloadData ();
        }

        void AddNewItem (object sender, EventArgs args)
        {
            dataSource.Objects.Add (DateTime.Now);

            // This will cause the error that you are seeing when 
            //  it reaches the TableView.InsertRows...
            //if (dataSource.Objects.Count > 10) {
            //  RemoveTopRow ();
            //}

            using (var indexPath = NSIndexPath.FromRowSection (0, 0))
                TableView.InsertRows (new [] { indexPath }, UITableViewRowAnimation.Automatic);

            //This will work
            if (dataSource.Objects.Count > 10) {
                RemoveTopRow ();
            }
        }

答案 1 :(得分:0)

您需要在使用insert / delete之前调用BeginUpdates(),然后调用EndUpdates()。像图片一样。 enter image description here

希望它可以帮到你。 有关Xamarin.iOS欢迎的任何问题。