我正在开发一个在UITableView中显示会话的iOS应用程序。我目前正处于开发自定义tableviewcell以表示我的数据的阶段。
根据事件类型,我正在更改tableviewcell(蓝色或橙色)中小条的背景颜色。出于某种原因,关闭着色并且tableview添加了另一个不应添加的单元格。见下图。
注意第一个单元格..它有类型:“ISKE”所以应该是橙色,这是正确的。注意第二个单元格具有类型:“ISKA”。现在右边的栏应该是蓝色,显然不是。但这很奇怪,因为日期的字体颜色是正确的颜色。另请注意显示的最后一个栏,而没有可用的额外单元格。
我不知道为什么会这样。我希望有人能指出我正确的方向。 我的get cell方法如下:
public override UITableViewCell GetCell (UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
{
Session session = ObjectModel.Current.AllSessions.ElementAt (indexPath.Row);
SessionTableViewCell cell = tableView.DequeueReusableCell (session.SessionEvent.EventTitle) as SessionTableViewCell;
if (cell == null)
{
cell = new SessionTableViewCell ();
var views = NSBundle.MainBundle.LoadNib ("SessionTableViewCell", cell, null);
cell = Runtime.GetNSObject (views.ValueAt (0)) as SessionTableViewCell;
}
if (session.SessionEvent.EventTitle == "ISKE") {
cell.SessionEventColor = UIColor.FromRGB (255, 165, 0);
cell.SessionDateFontColor = UIColor.FromRGB (255, 165, 0);
} else {
cell.SessionEventColor = UIColor.FromRGB (80, 124, 191);
cell.SessionDateFontColor = UIColor.FromRGB (80, 124, 191);
}
cell.SessionDay = session.SessionDate.DayOfWeek.ToString ().ToUpper ();
cell.SessionTime = session.SessionDate.ToString ("HH:mm");
cell.SessionDate = session.SessionDate.Day.ToString ().ToUpper ();
cell.SessionSpeaker = "testspeaker";
cell.ImgBgView.Layer.BorderColor = UIColor.FromRGB (206, 206, 208).CGColor;
cell.ImgBgView.Layer.BorderWidth = 1.0f;
cell.SelectionStyle = UITableViewCellSelectionStyle.None;
cell.SessionTitle = session.SessionTitle;
cell.SessionEvent = session.SessionEvent.EventTitle;
cell.SessionRoom = session.SessionRoom;
return cell;
}
答案 0 :(得分:1)
检查您的数据源,UITableView
指定的高度和单元格高度。
答案 1 :(得分:0)
cell = new SessionTableViewCell ();
var views = NSBundle.MainBundle.LoadNib ("SessionTableViewCell", cell, null);
cell = Runtime.GetNSObject (views.ValueAt (0)) as SessionTableViewCell;
您不必调用构造函数AND LoadNib
。 LoadNib
应该足够了。调用两者都可能导致麻烦。所以你的代码应该是:
var nibs = NSBundle.MainBundle.LoadNib ("SessionTableViewCell", cell, null);
cell = Runtime.GetNSObject (nibs.ValueAt (0)) as SessionTableViewCell;
答案 2 :(得分:0)
您的LoadNib
用法看起来不对:
var views = NSBundle.MainBundle.LoadNib ("SessionTableViewCell", cell, null);
这意味着所有者是自己的单元格。我会做
var views = NSBundle.MainBundle.LoadNib ("SessionTableViewCell", this, null);
希望有所帮助