gpt4 book ai didi

xamarin.ios - 如何使用Interface Builder中的自定义UITableViewCell?

转载 作者:行者123 更新时间:2023-12-04 02:40:32 24 4
gpt4 key购买 nike

我希望能够在IB中设计自己的UITableViewCell。
但是,当尝试访问我在IB中定义的标签时,我总是收到null ref异常。

这是我在做什么:

在Interface Builder中:

  • 我删除了“ View ”,而是添加了UITableViewCell。
  • 将UITableViewCell的类更改为“TestCellView”。
  • 向该单元格添加了一个UILabel。
  • oLblText中添加了一个 socket “TestCellView”,并将UILabel连接到该 socket 。
  • 将类的标识符更改为“TestCellView”。

  • 实现TestCellView.xib.cs

    public partial class TestCellView : UITableViewCell
    {
    public TestCellView(string sKey) : base(UITableViewCellStyle.Default, sKey)
    {
    }

    public TestCellView(IntPtr oHandle) : base(oHandle)
    {
    }

    public string TestText
    {
    get
    {
    return this.oLblText.Text;
    }
    set
    {
    // HERE I get the null ref exception!
    this.oLblText.Text = value;
    }
    }
    }

    ** TestCellView.designer.cs **

    [MonoTouch.Foundation.Register("TestCellView")]
    public partial class TestCellView {

    private MonoTouch.UIKit.UILabel __mt_oLblText;

    #pragma warning disable 0169
    [MonoTouch.Foundation.Connect("oLblText")]
    private MonoTouch.UIKit.UILabel oLblText {
    get {
    this.__mt_oLblText = ((MonoTouch.UIKit.UILabel)(this.GetNativeField("oLblText")));
    return this.__mt_oLblText;
    }
    set {
    this.__mt_oLblText = value;
    this.SetNativeField("oLblText", value);
    }
    }
    }

    在我的表格来源中:

    public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
    {
    TestCellView oCell = (TestCellView)tableView.DequeueReusableCell("myCell");
    if(oCell == null)
    {
    // I suppose this is wrong but how to do it correctly?
    // this == my UITableViewSource.
    NSBundle.MainBundle.LoadNib("TestCellView", this, null);
    oCell = new TestCellView("myCell");
    }
    oCell.TestText = "Cell " + indexPath.Row;
    return oCell;
    }

    请注意,我不需要涉及每个单元格的UIViewController的解决方案。我在网上看到了几个例子。我只是认为这完全是矫kill过正。

    我究竟做错了什么?

    最佳答案

    首先,这是设计问题。如果您的表格 View 始终加载具有静态内容的特定数量的单元格(例如在“设置” View 中),请为所需的每一行创建一个自定义单元格,并将每一行与 socket 连接。

    如果不是这种情况,那么您有两个选择:

  • 创建一个类,该类以编程方式继承UITableViewCell和您想要的每个 View ,而无需使用Interface Builder。
  • 使用Controller 添加一个新的iPhone View ,在其中替换 View 并像对待它一样对待它。除了必须将单元与文件所有者中的 socket 连接的事实。因此,当实例化该 Controller 时,所有单元的 subview 都可以。

  • 这不是一个矫kill过正,或者至少苹果公司推荐它:click and go to the "Loading Custom Table-View Cells From Nib Files" paragraph

    PS:遇到过类似情况,这就是我做到的方式。在此示例中,在MonoTouch中,您不需要LoadNib任何东西。只需在表源中的GetCell覆盖内执行此操作:
    using (CellController controller = new CellController())
    {

    cell = (CustomCell)controller.View;

    }

    甚至甚至可以在o​​jit_code对象内部声明一个额外的导出,以避免从UIView进行转换。

    关于xamarin.ios - 如何使用Interface Builder中的自定义UITableViewCell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5365385/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com