我正在使用自定义的UITableViewDelegate,并且在我的控制器中,我希望在tableview有行选择时运行一些代码。我注意到UITableViewDelegate已经有一个名为RowSelected的事件但你不能使用它我猜是因为UITableViewDelegate中有一个方法具有完全相同的名称。
如果我写:
mytableviewdelegate.RowSelected + = myeventhandler;
这不会编译并给出错误:
“无法分配给'RowSelected',因为它是'方法组'”
任何想法,我有一个很好的解决方案,所以我真的想知道如果这是MonoTouch中的错误吗?
答案 0 :(得分:2)
您是如何实现自定义UITableViewDelegate的?我建议使用Monotouch的UITableViewSource
,因为它将UITableViewDataSource
和UITableViewDelegate
合并到一个文件中,这使得事情变得更加容易。
一些示例代码:
(在UIViewController
中包含UITableView
)
tableView.Source = new CustomTableSource();
然后你会想要为此创建一个新类:
public class CustomTableSource : UITableViewSource
{
public CustomTableSource()
{
// constructor
}
// Before you were assigning methods to the delegate/datasource using += but
// in here you'll want to do the following:
public override int RowsInSection (UITableView tableView, int section)
{
// you'll want to return the amount of rows you're expecting
return rowsInt;
}
// you will also need to override the GetCells method as a minimum.
// override any other methods you've used in the Delegate/Datasource
// the one you're looking for in particular is as follows:
public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
// do what you need to here when a row is selected!
}
}
这应该可以帮助你开始。在UITableViewSource
类中,您始终可以键入public override
,MonoDevelop将向您显示可以覆盖的方法。