在View Controller中侦听UITableView事件

时间:2015-03-18 20:48:58

标签: xamarin

我使用故事板创建了一个View Controller,并在其上放置了一个UITableView。

我的问题是我无法弄清楚如何在UITableView中监听行选择。

我知道它在UITableViewController中是如何工作的。您重写RowSelected。但这是一个视图控制器的INSIDE表。

我是Xamarin的新手,这让我发疯了。我将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:1)

我更喜欢使用与此解决方案类似的东西:

    public class TestTableViewSource : UITableViewSource
    {
        public delegate void RowSelectedEventHandler(NSIndexPath selectedIndexPath);

        public event RowSelectedEventHandler RowSelectedEvent;

        protected virtual void OnRowSelectedEvent(NSIndexPath selectedindexpath)
        {
            RowSelectedEventHandler handler = RowSelectedEvent;
            if (handler != null) handler(selectedindexpath);
        }

        public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
        {
            OnRowSelectedEvent(indexPath);
            tableView.DeselectRow(indexPath, true);
        }

        public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
        {
            throw new NotImplementedException();
        }

        public override nint RowsInSection(UITableView tableview, nint section)
        {
            throw new NotImplementedException();
        }
    }

所以你可以在你的UIViewController中执行此操作:

    TestTableViewSource source = new TestTableViewSource();
    source.RowSelectedEvent += RowSelected;
    YourTableView.Source = source;

    private void RowSelected(NSIndexPath path)
    {
        // handle the selected row.
    }

当然,通过将RowSelected提取到抽象类中可以进一步改进此解决方案,以便以后可以重用它 - 但这取决于您:)。