使用 monodevelop 和 Xcode 4 创建自定义表格单元格
Posted
技术标签:
【中文标题】使用 monodevelop 和 Xcode 4 创建自定义表格单元格【英文标题】:Create Custom Table cell with monodevelop and Xcode 4 【发布时间】:2013-02-21 19:14:20 【问题描述】:我想通过 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
【问题讨论】:
【参考方案1】:我不太确定您看到的问题是什么。
但是,如果您只使用 iOS6,那么如果您切换到用于注册 NIB 和使表格单元格出列的新 API 而不是使用 LoadNib 代码,这可能会有所帮助。
我发现切换有助于使我的代码更可靠地工作。
所以,注册你的手机:
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
代码对我来说是错误的 - 如果你的列表很大,你可能会遇到内存问题。
【讨论】:
感谢您的回复。它不适合我。当我将“cell = (ListingCell) tableView.DequeueReusableCell (identifier)”更改为“cell = (ListingCell) tableView.DequeueReusableCell (identifier, indexPath)”时,应用程序会导致有效参数错误。我忽略了这一点,并将 ' var views = NSBundle.MainBundle.LoadNib("ListingCell", cell, null) ' 更改为 ' var views = NSBundle.MainBundle.LoadNib("ListingCell", cell, null) ' 并设置下一行。现在,应用程序在运行时列出对象(如“LocatoinLbl”)时出现错误 关于添加图片和内存错误。我在我的 get cell 方法中很关心它。基于 xamarin 惰性表示例。 可能是因为我在“LoadNib”方法中使用了“nibName”参数。只是我使用我的自定义单元类。但似乎在这个问题中***.com/questions/7184206/… 的答案是说这是另一回事。 'nibName' 我错了吗? 抱歉 - 我不确定我能否通过这些 cmets 了解您的想法。太难了 - 抱歉:/以上是关于使用 monodevelop 和 Xcode 4 创建自定义表格单元格的主要内容,如果未能解决你的问题,请参考以下文章
调试器无法连接到 Monodevelop(模拟器和真实设备)
使用 Monodevelop C# 在 iPad 中创建 UITableView