monotouch UITableViewDelegate RowSelected事件无法使用?

时间:2011-04-05 08:41:31

标签: xamarin.ios

我正在使用自定义的UITableViewDelegate,并且在我的控制器中,我希望在tableview有行选择时运行一些代码。我注意到UITableViewDelegate已经有一个名为RowSelected的事件但你不能使用它我猜是因为UITableViewDelegate中有一个方法具有完全相同的名称。

如果我写:

mytableviewdelegate.RowSelected + = myeventhandler;

这不会编译并给出错误:

“无法分配给'RowSelected',因为它是'方法组'”

任何想法,我有一个很好的解决方案,所以我真的想知道如果这是MonoTouch中的错误吗?

1 个答案:

答案 0 :(得分:2)

您是如何实现自定义UITableViewDelegate的?我建议使用Monotouch的UITableViewSource,因为它将UITableViewDataSourceUITableViewDelegate合并到一个文件中,这使得事情变得更加容易。

一些示例代码:

(在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将向您显示可以覆盖的方法。