2

我一直在学习许多教程,以使用故事板将自定义表格视图单元格组合在一起作为原型表格视图。

我是 monotouch 的新手,并设法为标准单元类型找到了一个可行的解决方案。由于我无法以正确的方式初始化新的单元格,因此遇到了自定义视图单元格的问题。一些旧教程似乎加载了一个单元笔尖文件,但我正在使用带有以下代码的情节提要。

我哪里错了?

(我会使用单点触控对话框,但我想不出一种方法以简单的方式在附件等上添加可爱的 uipickerviews)。

http://docs.xamarin.com/guides/ios/user_interface/tables/part_5_-_using_xcode%2C_interface_builder%2C_and_storyboards

public override UITableViewCell GetCell (UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
{
    // in a Storyboard, Dequeue will ALWAYS return a cell
    //*** above comment doesnt seem to hold for custom uitableview cells
    UITableViewCell cell = tableView.DequeueReusableCell (cellIdentifier);
    // now set the properties as normal
    cell.TextLabel.Text = tableItems[indexPath.Row].Name;
    if (tableItems[indexPath.Row].Done) 
        cell.Accessory = UITableViewCellAccessory.Checkmark;
    else
        cell.Accessory = UITableViewCellAccessory.None;
    return cell;
}


// here's my implementation of GetCell but problem is that I can't seem to generate a new cell
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
        _cellIdentifier = "SingleTimeViewCell";
        CustomViewCell cell = tableView.DequeueReusableCell (_cellIdentifier) as 

//      if (cell == null)
//      {
//          cell = new SingleTimeViewCell();
//      }

         cell.myCustomProperty = "hello";
         return cell;
}

// here's the auto generated CustomViewCell class from Xcode storyboard
public partial class CustomViewCell : UITableViewCell
{
    public CustomViewCell () : base()  // I added this ctor but it didnt seem to help matters
    {
    }

    public CustomViewCell (IntPtr handle) : base (handle)
    { 
    }

}
4

4 回答 4

1

只能使用带有原型单元的情节提要来完成,请参阅Xamarin 论坛中的此示例

以下是相关代码(Stephane Cordonnier 提供):

public partial class CustomCellStoryBoardViewController : UIViewController
{
    public CustomCellStoryBoardViewController(IntPtr handle) : base (handle)
    {
    }

    public override void DidReceiveMemoryWarning()
    {
        base.DidReceiveMemoryWarning();
    }

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        this.MyTableView.DataSource = new MyDataSource();
    }

    private class MyDataSource : UITableViewDataSource
    {
        private String[] items = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };

        public MyDataSource()
        {
        }

        public override int RowsInSection(UITableView tableView, int section)
        {
            return this.items.Length;
        }

        public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
        {
            MyCustomCell cell = (MyCustomCell)tableView.DequeueReusableCell(MyCustomCell.Key);
            cell.SetTitle(this.items[indexPath.Row]);
            return cell;
        }
    }
}

自定义单元格:

[Register ("MyCustomCell")]
public class MyCustomCell : UITableViewCell
{
    [Outlet]
    MonoTouch.UIKit.UILabel TitleLabel { get; set; }

    public static readonly NSString Key = new NSString("MyCustomCell");

    public MyCustomCell(IntPtr handle) : base(handle)
    {
    }

    public void SetTitle(String title)
    {
        this.TitleLabel.Text = title;
    }
}

确保您已将自定义单元类和标识符设置为情节提要中单元类的名称。

于 2014-11-07T09:15:39.320 回答
0

你不能用故事板来做。对单元格使用主故事板和单独的 xib 文件。

于 2013-04-17T13:08:58.470 回答
0

在您的 .xib 文件中,对于该单元格,您是否使用相同的单元格标识符“SingleTimeViewCell”。我不确定您是如何创建自定义单元格的,但我知道我遇到了同样的问题。

于 2013-04-15T23:53:27.483 回答
0

我读到了关于 tableview 单元格和重用以及 Xib 的非常无意义的内容,几乎每个找到的示例代码都没有正确重用......

在 iOS6 上以及更简单的方法:

  1. 从 Xamarin 创建一个新的 UITABLEVIEWCELL。(假设是 MyCustomCell)
  2. 在 InterfaceBuilder 中将单元格的 Identifier 设置为 MyCustomCell.Key 的值(在 Xamarin Studio 创建的 MyCsutomCell.cs 中找到该值)
  3. 在您的 ViewController 中以这种方式注册笔尖:

tableView.RegisterNibForCellReuse (MyCsutomCell.Nib, MyCsutomCell.Key);

  1. 然后在 dataSource 中的 GetCell 方法上,将一个单元格出列(如果不存在,它将创建一个):

MyCsutomCell cell = tableView.DequeueReusableCell (MyCsutomCell.Key) as MyCsutomCell;

于 2015-08-05T15:53:13.140 回答