UITableView的可重用单元格未显示标签文本

时间:2017-12-03 16:14:13

标签: c# xamarin.ios

我正在尝试在Xamarin.IOS中为TableView控件使用可重用的单元格。 我已经在我的故事板上放置了一个表视图。

然后我将Prototype Cells属性设置为1。 然后我选择了UITableViewCell(在设置Prototype Cells属性后显示)并为其指定了标识符“MainTableViewCell”。

我期望在运行此程序时查看包含40个项目的填充列表,其值为“表项x”(x是在for循环中设置的i的值)。

但是我在一个包含40个项目的列表中看到了(这是正确的),但TextLabel没有显示任何文本,每个单元格都是空白的。

DequeueReusableCell的调用返回非空值,所以我不确定为什么我无法在IOS模拟器中看到标签文本。我看到构建输出中没有错误,所以任何帮助都会受到赞赏。

的ViewController

public partial class ViewController : UIViewController
{
    private List<string> _tableItems;

    protected ViewController( IntPtr handle ) : base( handle )
    {
        _tableItems = new List<string>( );
        for ( int i = 0; i < 40; i++ )
        {
            _tableItems.Add( $"Table item {i}" );
        }

    }

    public override void ViewDidLoad( )
    {
        base.ViewDidLoad( );
        MainTableView.Source = new MainTableViewSource( _tableItems );
    }

    public override void DidReceiveMemoryWarning( )
    {
        base.DidReceiveMemoryWarning( );
        // Release any cached data, images, etc that aren't in use.
    }
}

MainTableViewSource

public class MainTableViewSource : UITableViewSource
{
    private List<string> _items;
    private const string CallIdentifier = "MainTableViewCell";

    public MainTableViewSource( params string[ ] items )
    {
        _items = new List<string>( items );
    }

    public MainTableViewSource( IEnumerable<string> items )
        : this( items.ToArray( ) ) { }

    public override UITableViewCell GetCell( UITableView tableView, NSIndexPath indexPath )
    {
        var cell = tableView.DequeueReusableCell( CallIdentifier );
        if ( cell is null )
        {
            cell = new UITableViewCell( UITableViewCellStyle.Default, CallIdentifier );
        }
        cell.TextLabel.Text = _items[ indexPath.Row ];
        return cell;
    }

    public override nint RowsInSection( UITableView tableview, nint section ) => _items.Count;
}

1 个答案:

答案 0 :(得分:0)

好的想通了。 我没有限制表格,因此单元格标签不在屏幕上。 一旦我约束了桌子,我就能看到细胞标签。