C# MonoTouch:如何使用UITableViewController作为UITableView的数据源?

C# MonoTouch:如何使用UITableViewController作为UITableView的数据源?,c#,xamarin.ios,uikit,C#,Xamarin.ios,Uikit,我正在使用带有静态内容的故事板和表视图。在内部,似乎UITableViewController隐式地成为UITableView的源 如果我现在想影响静态内容,我必须重写表源的方法。在ObjectiveC中,我可以 -(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { if (section == 0) return @"HELLO!";

我正在使用带有静态内容的故事板和表视图。在内部,似乎
UITableViewController
隐式地成为
UITableView
的源

如果我现在想影响静态内容,我必须重写表源的方法。在ObjectiveC中,我可以

-(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return @"HELLO!";
    else {
        return [super tableView:tableView titleForHeaderInSection:section];
    }
}
在我的控制器中,该方法将被重写。但在MonoTouch中,这不起作用。 请注意,我不希望创建委托或数据源的新实例。对于静态单元格,控制器是源/委托。在Objective中,这是通过使控制器实现相应的协议来实现的

以下是我提出的与此主题相关的问题,但现在我无法将解决方案转换为MonoTouch:


在Mono Touch中,您必须创建一个数据源代理

就像这篇博文中的演示:


如果要自定义标题部分的标题,只需覆盖TableViewDelegate中的titleForHeaderInSection。

在Mono Touch中,您必须创建数据源代理

就像这篇博文中的演示:


如果要自定义标题部分的标题,只需覆盖TableViewDelegate中的titleForHeaderInSection即可。

在Xamarin网站上的精彩教程中找到了解决方案:

Export
”属性完成了这个任务

public partial class TestController : UITableViewController
    {
        public TestController (IntPtr handle) : base (handle)
        {

        }

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

        [Export("tableView:titleForHeaderInSection:")]
        public string TitleForHeaderInSection(UITableView oTableView, int iSection)
        {
            return "TEST";
        }
    }

在Xamarin网站上的精彩教程中找到了解决方案:

Export
”属性完成了这个任务

public partial class TestController : UITableViewController
    {
        public TestController (IntPtr handle) : base (handle)
        {

        }

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

        [Export("tableView:titleForHeaderInSection:")]
        public string TitleForHeaderInSection(UITableView oTableView, int iSection)
        {
            return "TEST";
        }
    }

我知道。但在特定情况下,UITableViewController是委托。所以我不想再创造一个。我只是想告诉我的控制器,它实现了协议。在.NET中,不可能有一个由多个类继承的类。仅具有多个接口,但UITableViewDataSource不是一个接口。因此,您必须为UITableView创建一个单独的委托。在Objective-C中,可以有一个实现多个协议的类。另请参阅我知道的“协议深入研究”文档。但在特定情况下,UITableViewController是委托。所以我不想再创造一个。我只是想告诉我的控制器,它实现了协议。在.NET中,不可能有一个由多个类继承的类。仅具有多个接口,但UITableViewDataSource不是一个接口。因此,您必须为UITableView创建一个单独的委托。在Objective-C中,可以有一个实现多个协议的类。另请参阅本文档“Protocols Deep dive”,我使用
[Export(“tableView:didSelectRowAtIndexPath:”)]
尝试过它,但从未调用过它。您是否添加了其他内容?@测试您必须将控制器设置为
WeakDelegate
WeakSource
-不记得确切的属性。
WeakDelegate
对我说了些什么。下次需要时我会尝试。我用
[Export(“tableView:DidSelectRowatineXpath:”)]
尝试过,但从未调用过。您是否添加了其他内容?@测试您必须将控制器设置为
WeakDelegate
WeakSource
-不记得确切的属性。
WeakDelegate
对我说了些什么。下次我需要的时候我会试试的。