Update1:非常感谢 Greg Munn 和 Json 看我的代码,在当前阶段,我认为这可能是由于我使用的是 MonotTouch 的评估版。
更新2:我粘贴了版本信息,输出也更新了。
更新 3:安装 monotouch 2.0 后,我能够将应用程序部署到设备,它确实发生在真实设备上。但它在模拟器上继续出现相同的症状。
我得到了派生自 UITableViewSource 的自定义类(TableSource),我发现一旦我尝试在模拟器(6.1)中滚动表格视图,它将创建整个 1000 个单元格。我仍在尝试 monoTouch,我不确定它在真实设备上运行后的行为是什么。我真的不知道为什么当我尝试滚动表格视图时它会创建 1000 个单元格。我错过了什么吗?
这是输出的一部分:
Console.Out.WriteLine(string.Format("Created: {0} Reused: {1} - currentRow: {2}", this._totalRowCreated, this._totalRowReused, indexPath.Row.ToString()));
- 2013-02-20 17:43:16.638 TableViewTest[3039:c07] 创建新的 row999
- 2013-02-20 17:43:16.638 TableViewTest[3039:c07] 创建:1000 重用:0 - currentRow:999
- 2013-02-20 17:43:16.638 TableViewTest[3039:c07] 创建新的 row1000
- 2013-02-20 17:43:16.639 TableViewTest[3039:c07] 创建:1001 重用:0 - currentRow:1000
- 2013-02-20 17:43:21.581 TableViewTest[3039:c07] 创建新的 row11
- 2013-02-20 17:43:21.582 TableViewTest[3039:c07] 创建:1002 重用:0 - currentRow:11
- 2013-02-20 17:43:30.650 TableViewTest[3039:c07] 重用 row1001
- 2013-02-20 17:43:30.650 TableViewTest[3039:c07] 创建:1002 重用:1 - currentRow:1001
- 2013-02-20 17:43:30.651 TableViewTest[3039:c07] 创建新的 row1002
- 2013-02-20 17:43:30.651 TableViewTest[3039:c07] 创建:1003 重用:1 - currentRow:1002
- 2013-02-20 17:43:30.904 TableViewTest[3039:c07] 创建新的 row12
- 2013-02-20 17:43:30.904 TableViewTest[3039:c07] 创建:1004 重用:1 - currentRow:12
- 2013-02-20 17:43:30.905 TableViewTest[3039:c07] 创建新行 0
2013-02-20 17:43:30.906 TableViewTest[3039:c07] 创建:1005 重用:1 - currentRow:0
public override bool FinishedLaunching(UIApplication app, NSDictionary options) { this.window = new UIWindow(UIScreen.MainScreen.Bounds); this.window.MakeKeyAndVisible(); this.viewController = new TableViewTestViewController(); this.viewController.View.Frame = new RectangleF( 0, UIApplication.SharedApplication.StatusBarFrame.Height, UIScreen.MainScreen.ApplicationFrame.Width, UIScreen.MainScreen.ApplicationFrame.Height); this.window.RootViewController = viewController; return true; }
private TableSource _tblSrc;
public override void ViewDidLoad()
{
base.ViewDidLoad();
// Perform any additional setup after loading the view, typically from a nib.
if (this._tblSrc == null)
{
this._tblSrc = new TableSource();
for (int i = 0; i < 1000; i++)
{
this._tblSrc.DataItems.Add(string.Format("Row {0}", i));
}
this.TableView.Source = this._tblSrc;
}
}
//---------------------------------
namespace TableViewTest.Models
{
public class TableSource : UITableViewSource
{
private string _cellIndentifier = "MyCellId";
private List<string> _dataItems;
private int _totalRowCreated = 0;
private int _totalRowReused = 0;
public TableSource()
{
}
public List<string> DataItems
{
get{ return this._dataItems ?? (this._dataItems = new List<string>());}
}
public override int RowsInSection(UITableView tableview, int section)
{
return this.DataItems.Count;
}
public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
var cell = tableView.DequeueReusableCell(this._cellIndentifier);
if (cell == null)
{
this._totalRowCreated ++;
Console.Out.WriteLine("Create new row" + indexPath.Row.ToString());
cell = new UITableViewCell(UITableViewCellStyle.Default, this._cellIndentifier);
cell.Tag = indexPath.Row;
} else
{
this._totalRowReused ++;
Console.Out.WriteLine("Reuse row" + indexPath.Row.ToString());
}
Console.Out.WriteLine(string.Format("Created: {0} Reused: {1}", this._totalRowCreated, this._totalRowReused));
var value = this.DataItems [indexPath.Row];
cell.TextLabel.Text = value;
return cell;
}
}
}
MonoDevelop 3.1.1
Installation UUID: 4098f059-8936-47d8-8e66-4e501f33a58b
Runtime:
Mono 2.10.9 (tarball)
GTK 2.24.10
GTK# (2.12.0.0)
Package version: 210090011
Apple Developer Tools:
Xcode 4.6 (2066)
Build 4H127
Xamarin.Mac: Not Installed
Monotouch: 6.0.10 (Evaluation)
Mono for Android: Not Installed
Build information:
Release ID: 30101000
Git revision: 5d928ec4f9d5864b4db04a1301b8a8649b43fb9d
Build date: 2012-12-14 19:11:30+0000
Xamarin addins: 80f2dcc8fe4ed316b3e77dde496fc33d90305047
Operating System:
Mac OS X 10.8.2