【问题标题】:Xamarin Table View CrashXamarin 表视图崩溃
【发布时间】:2015-06-08 05:54:00
【问题描述】:

我想在 XamarinApp 上使用 UITableView

我尝试了 UITableView 示例 Populating a Table with Data ,但它不起作用。

当我使用this.Add(table); 时导致崩溃。当我删除 this.Add(table) 时,它显示的是空表。

请帮帮我……

这是我的代码

using Foundation;
using System;
using System.CodeDom.Compiler;
using UIKit;

namespace KUkyuko
{
    partial class MyTableViewSource : UITableView
    {
        public MyTableViewSource(IntPtr handle) : base (handle)
        {
            var table = this;
            string[] tableItems = new string[] {"Vegetables","Fruits","Flower Buds","Legumes","Bulbs","Tubers"};
            table.Source = new TableSource(tableItems);
            this.Add(table); //this code cause crash
        }
    }
    public class TableSource : UITableViewSource {

        string[] TableItems;
        string CellIdentifier = "TableCell";

        public TableSource (string[] items)
        {
            TableItems = items;
        }

        public override nint RowsInSection (UITableView tableview, nint section)
        {
            return TableItems.Length;
        }

        public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
        {
            UITableViewCell cell = tableView.DequeueReusableCell (CellIdentifier);
            string item = TableItems[indexPath.Row];

            //---- if there are no cells to reuse, create a new one
            if (cell == null)
            { cell = new UITableViewCell (UITableViewCellStyle.Default, CellIdentifier); }

            cell.TextLabel.Text = item;

            return cell;
        }
    }
}

【问题讨论】:

    标签: ios uitableview xamarin xamarin.ios


    【解决方案1】:

    我不太确定你想要达到什么目的,但是

    我会像这样将 tableview 更改为 tableViewController::

    partial class TableViewController : UITableViewController
    {
        public TableViewController (IntPtr handle) : base (handle)
        {
            // Register the TableView's data source
            string[] tableItems = new string[] {"Vegetables","Fruits","Flower Buds","Legumes","Bulbs","Tubers"};
            this.TableView.Source = new TableSource(tableItems);
        }
    }
    
    public class TableSource : UITableViewSource {
    
        string[] TableItems;
        string CellIdentifier = "TableCell";
    
        public TableSource (string[] items)
        {
            TableItems = items;
        }
    
        public override nint RowsInSection (UITableView tableview, nint section)
        {
            return TableItems.Length;
        }
    
        public override nint NumberOfSections (UITableView tableView)
        {
            // TODO: return the actual number of sections
            return 1;
        }
    
        public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
        {
            UITableViewCell cell = tableView.DequeueReusableCell (CellIdentifier);
            string item = TableItems[indexPath.Row];
    
            //---- if there are no cells to reuse, create a new one
            if (cell == null)
            { cell = new UITableViewCell (UITableViewCellStyle.Default, CellIdentifier); }
    
            cell.TextLabel.Text = item;
    
            return cell;
        }
    }
    

    如果您在 viewController 中使用表格,那么您需要在 viewController 中执行此部分并为表格设置插座。

    当您将其添加到此代码时,此代码崩溃的原因:

     var table = this;
     string[] tableItems = new string[] {"Vegetables","Fruits","Flower Buds","Legumes","Bulbs","Tubers"};
     table.Source = new TableSource(tableItems);
     this.Add(table); //this code cause crash as it is the same as this.Add(this)
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      相关资源
      最近更新 更多