2
votes

I have the following CustomCell:

using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;

namespace Zurfers.Mobile.iOS
{
    public class CustomCell : UITableViewCell
    {
        UILabel headingLabel, subheadingLabel, priceLabel;
        UIImageView imageService;
        UIImageView star, star2, star3, star4, star5;
        public CustomCell (NSString cellId) : base (UITableViewCellStyle.Default, cellId)
        {
            imageService = new UIImageView();
            star   = new UIImageView();
            star2  = new UIImageView();
            star3  = new UIImageView();
            star4  = new UIImageView();
            star5  = new UIImageView();
            headingLabel = new UILabel(){
                Font = UIFont.FromName("Cochin-BoldItalic", 22f),
                TextColor = UIColor.FromRGB (127, 51, 0),
            };
            subheadingLabel = new UILabel(){
                Font = UIFont.FromName("Cochin-BoldItalic", 22f),
                TextColor = UIColor.FromRGB (127, 51, 0),
            };
            priceLabel = new UILabel(){
                Font = UIFont.FromName("Cochin-BoldItalic", 22f),
                TextColor = UIColor.FromRGB (127, 51, 0),
            };
        }

        public void UpdateCell (string title, string subtitle, string price, UIImage image)
        {
            imageService.Image = image;
            headingLabel.Text = title;
            subheadingLabel.Text = subtitle;
            priceLabel.Text = price;
        }

        public override void LayoutSubviews ()
        {
            base.LayoutSubviews ();
            imageService.Frame = new RectangleF(63, 5, 33, 33);
            headingLabel.Frame = new RectangleF(5, 4, 63, 25);
            subheadingLabel.Frame = new RectangleF(100, 18, 100, 20);
            priceLabel.Frame = new RectangleF(250, 18, 100, 20);
        }
    }
}

And this is my TableSource:

using System;
using MonoTouch.Foundation;
using MonoTouch.UIKit;

namespace Zurfers.Mobile.iOS
{
    public class HotelTableSource : UITableViewSource
    {

        string[] tableItems;
        NSString cellIdentifier = new NSString("TableCell");

        public HotelTableSource (string[] items)
        {
            tableItems = items;
        }
        public override int RowsInSection (UITableView tableview, int section)
        {
            return tableItems.Length;
        }

        public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
        {
            new UIAlertView("Row Selected", tableItems[indexPath.Row], null, "OK", null).Show();
            tableView.DeselectRow (indexPath, true); // normal iOS behaviour is to remove the blue highlight
        }

        public override UITableViewCell GetCell (UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
        {

            CustomCell cell = tableView.DequeueReusableCell(cellIdentifier) as CustomCell;
            if (cell == null)
                cell = new CustomCell(cellIdentifier);
            cell.UpdateCell(tableItems[indexPath.Row], tableItems[indexPath.Row], tableItems[indexPath.Row],
                            UIImage.FromFile (tableItems[indexPath.Row]) );
            return cell;


        }
    }
}

But when I run the app the TableView is empty. Each CustomCell has a value before I create the TableView.

What am I doing wrong?

Thanks in advance for your help.

1

1 Answers

4
votes

Cell not only should contains controls, they should be placed on it (or on it's ContentView). Call AddSubview for any controls, which you adding to your custom cell:

ImageService = new UIImageView();
AddSubview(ImageService);

If it doesn't help, try to use UITableViewCell's default controls (TextLabel, DetailTextLabel, ImageView) to show some data. If data appears, there is still an issue in your custom UITableViewCell (wrong frames, empty texts), If not, issue is in UITableViewSource (empty data).