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

时间:2012-05-22 14:44:30

标签: c# xamarin.ios uikit

我正在使用带有静态内容的故事板和表格视图。在内部,好像UITableViewController隐含地成为UITableView的来源。

如果我现在想要对静态内容施加影响,我将不得不重写表源的方法。在ObjectiveC中,我可以放置

-(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return @"HELLO!";
    else {
        return [super tableView:tableView titleForHeaderInSection:section];
    }
}

在我的控制器中,该方法将被覆盖。但在MonoTouch中,这不起作用。 请注意,我不想创建委托或数据源的新实例。对于静态单元格,控制器源/委托。在ObjectiveC中,这是通过使控制器实现相应的协议来完成的。

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

How to override tableView:titleForHeaderInSection: to adjust section headers of static UITableViews?

2 个答案:

答案 0 :(得分:5)

在Xamarin网站的精彩教程中找到了解决方案:{{3p>

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

答案 1 :(得分:-1)

在Mono Touch中,您必须创建一个DataSource Delegate。

与此博文中的演示类似:http://sabonrai.wordpress.com/2009/08/28/monotouch-sample-code-uitableview/

        public override string TitleForHeader (UITableView tableView, int section)
        {
        //do your stuff 
        }   

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