如何解决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 设计):
自定义 UITableViewCell 类
此时标题和数据单元格几乎相同,因为它们在加载 tableview 时都不会显示。
解决方法
这是我的 StoryBoard 包含一个 UITableView 并插入一个自定义 TabelViewCell(StudentCell):
首先,您需要检查 Identifier
在 StoryBoard 中的设置:
然后确保在 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 方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。