Я создаю приложение, которое содержит UITableview.У меня теперь отлично работает таблица, теперь я хочу сделать клетки более специфичными для моих потребностей.Ячейка таблицы содержит изображение, заголовок, подзаголовок и информацию о выпуске.Я думал, что это было просто сделать, но я не могу заставить его работать.Я пытаюсь следовать примеру (и образцу) из монофонического программирования wrox Professional для iPhone (стр. 120 и 121), но не могу заставить его работать в моем случае.Я попытался перейти по этой ссылке и по этой ссылке , но безрезультатно.Во-вторых, я делаю одну вещь по-другому, это становится проблемой.
У меня есть некоторые из следующих файлов в моем проекте:
- RootViewController (UITableViewController)
- myTableViewCell (UITableViewCell)
- BasicTableViewSource (UITableViewSource)
Примечание: у меня уже был RootViewController, но когда я создавал интерфейс для ячейки, я добавил частичный (для RootViewController) для добавленияячейка в.
Вот мои фрагменты кода:
myTableViewCell.xib.designer.cs
// Base type probably should be MonoTouch.UIKit.UIViewController or subclass
[MonoTouch.Foundation.Register("RootViewController")]
public partial class RootViewController {
private myTableViewCell __mt_Cell;
#pragma warning disable 0169
[MonoTouch.Foundation.Connect("Cell")]
private myTableViewCell Cell {
get {
this.__mt_Cell = ((myTableViewCell)(this.GetNativeField("Cell")));
return this.__mt_Cell;
}
set {
this.__mt_Cell = value;
this.SetNativeField("Cell", value);
}
}
}
// Base type probably should be MonoTouch.UIKit.UITableViewCell or subclass
[MonoTouch.Foundation.Register("myTableViewCell")]
public partial class myTableViewCell {
private MonoTouch.UIKit.UIImageView __mt_img;
private MonoTouch.UIKit.UILabel __mt_lblInfo;
private MonoTouch.UIKit.UILabel __mt_lblReleaseDate;
private MonoTouch.UIKit.UILabel __mt_lblTitle;
#pragma warning disable 0169
[MonoTouch.Foundation.Connect("img")]
private MonoTouch.UIKit.UIImageView img {
get {
this.__mt_img = ((MonoTouch.UIKit.UIImageView)(this.GetNativeField("img")));
return this.__mt_img;
}
set {
this.__mt_img = value;
this.SetNativeField("img", value);
}
}
[MonoTouch.Foundation.Connect("lblInfo")]
private MonoTouch.UIKit.UILabel lblInfo {
get {
this.__mt_lblInfo = ((MonoTouch.UIKit.UILabel)(this.GetNativeField("lblInfo")));
return this.__mt_lblInfo;
}
set {
this.__mt_lblInfo = value;
this.SetNativeField("lblInfo", value);
}
}
[MonoTouch.Foundation.Connect("lblReleaseDate")]
private MonoTouch.UIKit.UILabel lblReleaseDate {
get {
this.__mt_lblReleaseDate = ((MonoTouch.UIKit.UILabel)(this.GetNativeField("lblReleaseDate")));
return this.__mt_lblReleaseDate;
}
set {
this.__mt_lblReleaseDate = value;
this.SetNativeField("lblReleaseDate", value);
}
}
[MonoTouch.Foundation.Connect("lblTitle")]
private MonoTouch.UIKit.UILabel lblTitle {
get {
this.__mt_lblTitle = ((MonoTouch.UIKit.UILabel)(this.GetNativeField("lblTitle")));
return this.__mt_lblTitle;
}
set {
this.__mt_lblTitle = value;
this.SetNativeField("lblTitle", value);
}
}
BasicTableVIiewSource.cs
public override UITableViewCell GetCell(UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
{
UITableViewCell cell = tableView.DequeueReusableCell(this._cellIdentifier);
myTableViewCell mycell = null;
//if (cell == null)
//{
mycell = new myTableViewCell();
//NSBundle.MainBundle.LoadNib("RootViewController", _controller, null);
//_controller.myTableCell = new myTableViewCell();
//mycell = _controller.myTableCell;
//cell = new UITableViewCell(UITableViewCellStyle.Subtitle, this._cellIdentifier);
//}
//else
//{
// mycell = (myTableViewCell)cell;
//}
TrailerInfo item = this._tableItems[indexPath.Section].items[indexPath.Row];
mycell.Title = item.Title;
mycell.Info = "Genre: " + item.genre ;
mycell.ReleaseDate = Convert.ToDateTime(item.Releasedate).ToLongDateString();
mycell.Accessory = UITableViewCellAccessory.DisclosureIndicator;
if(!string.IsNullOrEmpty(item.ImageURL))
{
mycell.myImage = item.image;
}
return mycell;
}
RootViewController.xib.designer.cs
// Base type probably should be MonoTouch.UIKit.UIViewController or subclass
//[MonoTouch.Foundation.Register("RootViewController")]
public partial class RootViewController {
private MonoTouch.UIKit.UITableView __mt_view;
#pragma warning disable 0169
[MonoTouch.Foundation.Connect("view")]
private MonoTouch.UIKit.UITableView view {
get {
this.__mt_view = ((MonoTouch.UIKit.UITableView)(this.GetNativeField("view")));
return this.__mt_view;
}
set {
this.__mt_view = value;
this.SetNativeField("view", value);
}
}
}
RootViewController.xib
public override void ViewDidAppear(bool some)
{
this.TableView.Source = new BasicTableViewSource(items, this);
}
Как видите, со временем я менял код.Я не уверен, что именно проблема.В последнее время он продолжает говорить мне, что свойства (title, info, releaseate) являются нулевыми.Поэтому я предполагаю, что mytableviewcell не инициируется (или на него не ссылаются).Такое ощущение, что два частичных класса RootViewControlller не работают вместе.Опять же, это всего лишь догадка, я просто не понимаю, что происходит не так.Любая помощь приветствуется.