在使用IntPtr构造函数进行单元重用时设置Xamarin UITableViewCellStyle

时间:2015-04-28 10:37:28

标签: c# ios uitableview xamarin xamarin.ios

根据this Xamarin docs page,我正在Xamarin iOS应用中构建表格视图:

  • 自定义UITableViewSource课程,覆盖GetCell()NumberOfSections()RowsInSection()
  • 自定义UITableViewCell,实现使IntPtr启用单元格重用
  • 的构造函数
  • 在视图控制器中调用myTableView.RegisterClassForCellReuse(),为其指定自定义类型UITableViewCell

这似乎有效。但是,我想使用具有非默认样式的单元格。正如the next page in the docs所述,UITableViewCellStyle有几个选项,我想使用UITableViewCellStyle.Value2。现在,UITableViewCell有一个带UITableViewCellStyle选项的构造函数,但我无法使用它,因为单元格重用需要我实现IntPtr构造函数,我什么都看不到可以从 inside 中访问,可以用来设置样式的构造函数。

有没有办法在不使用UITableViewCellStyle构造函数的情况下选择不同的UITableViewCell(UITableViewCellStyle style, NSString reuseIdentifier)选项?

1 个答案:

答案 0 :(得分:1)

我不认为在不使用UITableViewCell(UITableViewCellStyle样式,NSString reuseIdentifier)构造函数的情况下加载不同的UITableViewCellStyle选项是不可能的。此构造函数加载基础XIB。

您提到了“非默认样式”,使用您自己的自定义UITableViewCell可以让您自由地根据需要设计布局,添加标签,图像等。在CustomUITableViewCell中创建一个公共方法,然后您可以定义如何显示内容,如下所示。

<强>的UITableView

public class CustomTableView : UITableView
{
    static readonly NSString MyCellId = new NSString ("CustomTableViewCell");

    public CustomTableView ()
    {
        RegisterClassForCellReuse(typeof(CustomTableViewCell), MyCellId);
        Source = new CustomDataSource();
    }
}

<强>的UITableViewCell

public class CustomTableViewCell : UITableViewCell
{
    public CustomTableViewCell (IntPtr handle) : base (handle)
    {}

    public Load(object[] data){

        //Create custom view in code

        var title = new UILabel();

        // etc.

        // Or pull in from an XIB

        UINib Nib = UINib.FromName ("CustomViewCell_iPad", NSBundle.MainBundle);
    }
}

<强> UITableViewSource

public class CustomTableDataSource : UITableViewSource
{

    private NSString MyCellId { get; set; }

    public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
    {
        var cell = (CustomTableViewCell)tableView.DequeueReusableCell (MyCellId, indexPath);
        cell.load(sampleData[indexPath.row]);
        return cell;
    }
}