我目前正在填写像这样的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有可能吗?
答案 0 :(得分:1)
如果你使用Xamarin.iOS 7.0或更高版本并使你的viewcontroller实现IUITableViewDataSource
或IUITableViewDelegate
,这是可能的。
示例:
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关键字。