0

我正在开发一个在 UITableView 中显示会话的 iOS 应用程序。我目前正处于开发自定义 tableviewcell 来表示我的数据的阶段。

根据事件类型,我正在更改 tableviewcell 中小条的背景颜色(蓝色或橙色)。出于某种原因,颜色已关闭,并且 tableview 添加了另一个不应添加的单元格。见下图。

在此处输入图像描述

注意第一个单元格..它的类型:“ISKE”所以应该是橙色的,这是正确的。注意第二个单元格的类型:“ISKA”。现在右边的栏应该是蓝色的,显然不是。不过这很奇怪,因为日期的字体颜色是正确的颜色。还要注意显示的最后一个栏,而没有额外的单元格可用。

我不知道为什么会这样。我希望有人能指出我正确的方向。我的获取单元格方法如下:

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;
}
4

3 回答 3

1

检查您UITableView指定的数据源、高度和单元格高度。

于 2013-09-16T11:10:21.997 回答
0
cell = new SessionTableViewCell ();
var views = NSBundle.MainBundle.LoadNib ("SessionTableViewCell", cell, null);
cell = Runtime.GetNSObject (views.ValueAt (0)) as SessionTableViewCell;

您不必调用构造函数 AND LoadNibLoadNib应该足够了。调用两者可能会导致麻烦。所以你的代码应该是:

var nibs = NSBundle.MainBundle.LoadNib ("SessionTableViewCell", cell, null);
cell = Runtime.GetNSObject (nibs.ValueAt (0)) as SessionTableViewCell;
于 2013-09-16T11:37:33.517 回答
0

你的LoadNib用法看起来不对:

var views = NSBundle.MainBundle.LoadNib ("SessionTableViewCell", cell, null);

这意味着所有者是自己的牢房。我会做

var views = NSBundle.MainBundle.LoadNib ("SessionTableViewCell", this, null);

希望能帮助到你

于 2013-09-16T11:49:44.550 回答