0

我想通过 Monodevelop 和基于 monotouch 的 xcode 4 为我的 iPhone 应用程序创建一个自定义表格单元格。我找到了这篇文章:

http://www.alexyork.net/blog/2011/07/18/creating-custom-uitableviewcells-with-monotouch-the-correct-way/

http://slodge.blogspot.co.uk/2013/01/uitableviewcell-using-xib-editor.html

通过这两篇文章,我创建了一个这样的类:

[Register("ListingCell")]
public partial  class ListingCell : UITableViewCell
{
    public ListingCell () : base()
    {
    }

    public ListingCell (IntPtr handle) : base(handle)
    {

    }

    public void BindDataToCell(DrivedProperty  _property)
    {
        LocatoinLbl.Text  = _property .LocationString ;

    }
    public void AddImageToCell(UIImage _image){
        ListingThumbnail .Image = _image ;
    }
}

我设计了我自己UITableViewCell定义的网点。然后在我的GetCell方法中,我使用了这样的代码:

    public override UITableViewCell GetCell (UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
        {
            ListingCell  cell;
cell = (ListingCell) tableView.DequeueReusableCell (identifier )  ;
            if (cell == null) {
                cell = new ListingCell ();
                var views = NSBundle.MainBundle.LoadNib("ListingCell", cell, null);
                cell = Runtime.GetNSObject( views.ValueAt(0) ) as ListingCell;
            }
var item = Controller.Items [indexPath.Row];
            cell.Tag = indexPath.Row;
            cell .BindDataToCell (item );
cell.AddImageToCell ( item .Image);
return cell;
        }

现在,应用程序构建良好,但是当我运行它时,调试器会出现以下错误:

    var views = NSBundle.MainBundle.LoadNib("ListingCell", cell, null);

并说:

MonoTouch.Foundation.MonoTouchException: Objective-C exception thrown.  Name: NSInternalInconsistencyException Reason: Could not load NIB in bundle: 'NSBundle </Users/john/Library/Application Support/iPhone Simulator/6.0/Applications/08FFAA89-4AC4-490D-9C1A-4DE4CBC6EBB7/Realtyna_iPhone_Project.app> (loaded)' with name 'ListingCell'

真的我不知道这是为了什么。当我删除它时。该应用程序在我的ListingCell班级中使用单元格对象生成错误。我在互联网上进行了很多搜索,但没有找到任何解决方案。有没有人对此有任何想法?

我发现可以以编程方式创建自定义单元格。它会起作用,但问题是在运行时以编程方式创建困难的单元格非常困难。我们通过 excode 创建这个单元很简单,但我不知道为什么它不起作用:-S

4

1 回答 1

0

我不太确定您看到的问题是什么。

但是,如果您只在 iOS6 上,那么如果您切换到用于注册 NIB 和使表格单元出队而不是使用 LoadNib 代码的新 API 可能会有所帮助。

我发现切换有助于使我的代码更可靠地工作。

所以,注册你的手机:

tableView.RegisterNibForCellReuse(UINib.FromName("ListingCell", NSBundle.MainBundle), ListingCell.Identifier);

然后,将出队代码更改为:

public override UITableViewCell GetCell (UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
{
    ListingCell  cell = (ListingCell) tableView.DequeueReusableCell (ListingCell.Identifier, indexPath)  ;
    var item = Controller.Items [indexPath.Row];
    cell.Tag = indexPath.Row;
    cell .BindDataToCell (item );
    cell.AddImageToCell ( item .Image);
    return cell;
}

这是基于您提到的一篇文章 - http://slodge.blogspot.co.uk/2013/01/uitableviewcell-using-xib-editor.html(免责声明 - 我写的!)


真的我不知道这是为了什么

我也不 - 所以不确定这是否有帮助......


Aside> 你的AddImageToCell代码对我来说是错误的 - 如果你的列表很大,你可能会遇到内存问题。

于 2013-02-22T09:08:27.317 回答