我想创建一个简单的示例,我想使用另一个UITableViewCellStyle
。在我的示例中,它是UITableViewCellStyleValue1
。我在故事板中添加了UITableViewController
,将类名设置为 NakedTableViewController ,从而使用动态原型作为内容,然后我设置表视图单元格样式到右侧详细信息,我还将单元格标识符设置为 MyCellId 。
这是我使用的代码:
NakedTableViewController
partial class NakedTableViewController : UITableViewController
{
public NakedTableViewController (IntPtr handle) : base (handle)
{
TableView.RegisterClassForCellReuse (typeof(UITableViewCell), NakedTableViewSource.MyCellId);
}
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
TableView.Source = new NakedTableViewSource ();
}
}
NakedTableViewSource
public class NakedTableViewSource : UITableViewSource
{
public static readonly NSString MyCellId = new NSString ("MyCellId");
public NakedTableViewSource ()
{
}
public override nint NumberOfSections (UITableView tableView)
{
// TODO: return the actual number of sections
return 1;
}
public override nint RowsInSection (UITableView tableview, nint section)
{
// TODO: return the actual number of items in the section
return 1;
}
public override string TitleForHeader (UITableView tableView, nint section)
{
return "Header";
}
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
UITableViewCell cell = tableView.DequeueReusableCell (MyCellId) as UITableViewCell;
// if (cell == null)
// cell = new UITableViewCell ();
// TODO: populate the cell with the appropriate data based on the indexPath
cell.TextLabel.Text = "TextLabel";
cell.DetailTextLabel.Text = "DetailTextLabel";
return cell;
}
正如您所看到的,我正在使用更新的细胞再利用模式。
当我尝试设置DetailTextLabel
:
对象引用未设置为对象的实例
因此,似乎样式UITableViewCellStyleValue1
未正确注册,并且详细信息标签的设置失败。我做错了什么?
修改
堆栈跟踪:
at TestNakedTableView.NakedTableViewSource.GetCell (UIKit.UITableView tableView, Foundation.NSIndexPath indexPath) [0x00028] in /Users/some-user/Projects/TestNakedTableView/TestNakedTableView/NakedTableViewSource.cs:47
at (wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
at UIKit.UIApplication.Main (System.String[] args, IntPtr principal, IntPtr delegate) [0x00005] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:62
at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00038] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:46
at TestNakedTableView.Application.Main (System.String[] args) [0x00008] in /Users/some-user/Projects/TestNakedTableView/TestNakedTableView/Main.cs:17
答案 0 :(得分:2)
更新答案:
解决方案:
[Export("initWithStyle:reuseIdentifier:")]
public MyCustomCell(UITableViewCellStyle style, NSString cellIdentifier)
: base(SomeConstantValue, UITableViewCellStyle.Value1, cellIdentifier)
{
}
来源:https://forums.xamarin.com/discussion/comment/54047/#Comment_54047
上一个答案:
我认为你只是错过了初始化
if (cell == null) {
cell = new UITableViewCell (UITableViewCellStyle.Value1, MyCellId);
}
所以完整的代码是:
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
UITableViewCell cell = tableView.DequeueReusableCell (MyCellId) as UITableViewCell;
if (cell == null) {
cell = new UITableViewCell (UITableViewCellStyle.Value1, MyCellId);
}
cell.TextLabel.Text = "TextLabel";
cell.DetailTextLabel.Text = "DetailTextLabel";
return cell;
}
[1] http://developer.xamarin.com/recipes/ios/content_controls/tables/specify_the_cell_type/