tableView添加额外(空)单元格

时间:2013-09-16 11:04:38

标签: ios uitableview xamarin.ios

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

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

enter image description here

注意第一个单元格..它有类型:“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;
}

3 个答案:

答案 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 LoadNibLoadNib应该足够了。调用两者都可能导致麻烦。所以你的代码应该是:

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);

希望有所帮助