如何在Xamarin中从控制器填充表格?

时间:2014-02-12 12:44:52

标签: ios uitableview xamarin.ios xamarin

我目前正在填写像这样的tableview:

public class DataViewController : UIViewController
{
    public override void ViewDidLoad ()
{
     base.ViewDidLoad ();
         //...
         this.DataTableView.Delegate = new DataTableViewSource();
    }

    public class DataTableViewSource : UITableViewSource
    {
         //UITableSource methods
    }
}

因此我必须以某种方式将数据传递给DataViewTableSource。这有效,但我更喜欢在UIViewController本身(包括单元格等)中管理我的表数据。有点像Objective-C如何使用UITableViewDataSource协议(接口)实现。

Xamarin有可能吗?

1 个答案:

答案 0 :(得分:1)

如果你使用Xamarin.iOS 7.0或更高版本并使你的viewcontroller实现IUITableViewDataSourceIUITableViewDelegate,这是可能的。

示例:

public class DataViewController : UIViewController, IUITableViewDataSource, IUITableViewDelegate
{
    public override void ViewDidLoad ()
    {
         base.ViewDidLoad ();
         //...
         this.DataTableView.WeakDataSource = this; //Make sure to use WeakDataSource instead of DataSource
    }

    public override int RowsInSection (UITableView tableview, int section){

    }

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

    }
}

如果要在Objective-C中实现任何标记为Optional的方法,则应在不使用override关键字的情况下实现它们,并添加一个与其Objective-C等效的导出属性。

像这样:

[Export ("tableView:accessoryButtonTappedForRowWithIndexPath:")]
public void AccessoryButtonTapped (UITableView tableView, NSIndexPath indexPath)
{
}

如果您有更新版本的Xamarin Studio / Xamarin.iOS for Visual Studio,intellisense应该会自动添加此导出属性,并在添加这些方法时删除override关键字。