微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin.iOS 自定义单元格不显示来自 Interface Builder 的标签

如何解决Xamarin.iOS 自定义单元格不显示来自 Interface Builder 的标签

我在界面构建器中创建了 2 个自定义 UITableViewCell,当我将单元格出列时,它们充当认单元格。我有 2 个部分,第一部分应该是标题标签,它们没有连接到任何代码,所以我不需要更改它们的值(在 IB 中设置)。第二部分将包含多行并连接到数据,因此我需要设置每个标签值。

注意事项:

  • 我已经仔细检查了重用标识符在界面和代码中是否正确
  • 最后,我像这样注册了单元格:

tableView.RegisterClassForCellReuse(typeof(TableInfoDataCell),TableInfoDataCell.cellID);

一些代码

public override UITableViewCell GetCell(UITableView tableView,NSIndexPath indexPath)
{
    try
    {
        switch (indexPath.Section)
        {
            case 1: // Situaltional Data
            { 
                tableView.RegisterClassForCellReuse(typeof(TableInfoDataCell),TableInfoDataCell.cellID);
                TableInfoDataCell cell = (TableInfoDataCell)tableView.DequeueReusableCell(TableInfoDataCell.cellID,indexPath);
                if (cell == null) { cell = new TableInfoDataCell(TableInfoDataCell.cellID); }
                //cell.SetSuccessCriteria = "N";
                cell.BackgroundColor = UIColor.Green;
                cell.TextLabel.Text = "Data Cell";
                return cell;
            }
            default: // Header Cells
            {
                tableView.RegisterClassForCellReuse(typeof(TableInfoHeaderCell),TableInfoHeaderCell.cellID);
                TableInfoHeaderCell cell = (TableInfoHeaderCell)tableView.DequeueReusableCell(TableInfoHeaderCell.cellID,indexPath);
                if (cell == null) { cell = new TableInfoHeaderCell(TableInfoHeaderCell.cellID); }
                cell.BackgroundColor = UIColor.Red;
                cell.TextLabel.Text = "Header Cell";
                return cell;
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("EXCEPTION: " + ex.Message);
        return null;
    }
}

表格在运行时的样子与它应该是什么样子(基于 Interface Builder 设计):

enter image description here

enter image description here

自定义 UITableViewCell 类

此时标题和数据单元格几乎相同,因为它们在加载 tableview 时都不会显示

enter image description here

解决方法

这是我的 StoryBoard 包含一个 UITableView 并插入一个自定义 TabelViewCell(StudentCell):

enter image description here

首先,您需要检查 Identifier 在 StoryBoard 中的设置:

enter image description here

然后确保在 GetCell 方法中使用相同的 Cell Id:

public override UITableViewCell GetCell(UITableView tableView,NSIndexPath indexPath)
{
    var cell = (StudentCell)tableView.DequeueReusableCell("Cell_ID",indexPath);
    var student = Students[indexPath.Row];
    cell.UpdateCell(student);
    //cell.TextLabel.Text = student.FullName;
    return cell;
}

最后,自定义单元格代码可以修改如下:

public partial class StudentCell : UITableViewCell
{
    protected StudentCell(IntPtr handle) : base(handle)
    {
        // Note: this .ctor should not contain any initialization logic.
    }

    internal void UpdateCell(Student student)
    {
        //LabelOne/LabelTwo/LabelThree is declared from TabeleViewCell in storyboard 

        LabelOne.Text = student.FullName;
        LabelTwo.Text = student.Course;
        LabelThree.Text = student.Duration;
    }
}

您不需要添加 AwakeFromNib 方法。

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。