1

我搜索了 xamarin 教程和有关 xamarin 中 UITableView 的各种帖子,但我找不到任何关于带有静态单元格的 UITableView 的信息。

我想要实现的是一个简单的细节屏幕,如 twitterific 应用程序,但没有 Nib 或故事板(使用 mvvmcross,故事板不可用,并且 Nib 文件阻止使用静态 UITableView,至少我找不到任何方法去做它)

此外,在尝试了不同的解决方案后,我得到了这样的结果:

UITableViewController

public override int NumberOfSections(UITableView tableView)
{
    return 1;
}

public override int RowsInSection(UITableView tableview, int section)
{
    return 1;
}

public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{

    UITableViewCell cell = tableView.DequeueReusableCell("test");

    if (cell == null)
    {
        cell = new SejourInfoViewPatientCell();
        //cell = new UITableViewCell(UITableViewCellStyle.Subtitle, "test");
    }

    //cell.TextLabel.Text = "test";

    return cell;
}

但是现在 mvvmcross 绑定不起作用。如果我采用完全相同的绑定并在非静态 UITableViewController 上使用它,一切正常

如果有人能指出我的方向,我会很高兴

推特化

4

2 回答 2

1

我一直在努力解决同样的问题。我可以通过让我的视图MvxViewController从那时继承来解决绑定问题ViewDidLoad

 
公共覆盖无效ViewDidLoad()
{
    base.ViewDidLoad();

    UITableView 表 = 新 UITableView();

    Action<UITableViewCell> 初始化器 = new Action<UITableViewCell>[] {
          (单元格)=> {
              this.CreateBinding(cell.TextLabel)
                  .For(c => c.Text)
                  .To(x => x.FirstName)
                  。申请();
          },
          (单元格)=> {
              this.CreateBinding(cell.TextLabel)
                  .For(c => c.Text)
                  .To(x => x.LastName)
                  。申请();
          }
    };

    StubDataSource source = new StubDataSource(table, initializers);

    table.Source = 来源;

}

StubDataSource继承自MvxStandardTableViewSource(尽管根据您的需要,您可能希望继承 UITableViewSource(而不是覆盖GetCell)。

公共类 StubDataSource : MvxStandardTableViewSource
{
    私有只读 Action<UITablleViewCell>[] _inits;

    公共存根数据源(
                UITableView 表视图,
                动作<UITableViewCell>[] 初始化)
            :基础(表视图)
    {
          _inits = 初始化;          
    }

    公共覆盖 int NumberOfSections(UITableView tableView)
    {
         返回 1;
    }

    公共覆盖 int RowsInSection(UITableView tableview, int section)
    {
         返回 2;
    }

    protected override UITableViewCell GetOrCreateCellFor(UITableView tableView, NSIndexPath indexPath, object item)
    {
        var 重用 = base.CreateDefaultBindableCell(tableView, indexPath, item);

        开关(indexPath.Row)
        {
             案例0:
                _inits[0](重用);
             情况1:
                _inits[1](重用);
        }

        回用;
    }

}

需要注意的两点,

  1. 这有点 hack(感谢 Closures),但它是我能想到的在 ios 中绑定到静态表的唯一方法。希望有人会提出更好的方法。
  2. 第二个是当您创建带有子视图的自定义单元格(例如 UITextFields 等)时,您应该创建一个自定义单元格类型并将这些子视图作为类变量,否则 GC 将收集它们您将获得SIGSEGV异常,请参见
于 2013-11-06T19:19:01.030 回答
0

我不确定staticTableView 或 Cell 是什么,但我刚刚在https://github.com/slodge/ListApp上发布了一个使用“自定义单元”的完整示例,以回答滚动时的 MvxTableViewSource DequeueReusableCell 问题

关键部分是:

  • 确保自定义单元格包含IntPtr构造函数
  • RegisterClassForCellReuse在自定义单元格类型上使用
  • GetOrCreateCellFor在您的表源中覆盖- 并用于DequeueReusableCell创建单元格

对于可变高度单元格,您还需要GetHeightForRow在表格源中覆盖

于 2013-10-31T13:10:51.303 回答