簡體   English   中英

您如何在UITableView中處理觸摸事件

[英]How do you handle Touch Events in a UITableView

我正在嘗試將事件應用於單元格以指定TouchesBegan方法。

cell.TouchesBegan += OnTouchesBegan;

但是TouchesBegan是一個方法組,而不是一個事件。

如何在monotouch中向Cells TouchesBegan()方法添加自定義行為?

[Register("MenuView")]
public class MenuView : ViewControllerBase
{
    private new MenuViewModel ViewModel { get { return (MenuViewModel)base.ViewModel; } }

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        // this ensures the sliding panel doesn't fill the entire view.
        var frame = View.Frame;
        frame.Width = 300;
        View.Frame = frame;

        var chapters = ViewModel.Chapters;

        //var listHeight = (chapters.Count*40);
        var navigationList = new UITableView(new RectangleF(0, 50, 300, 300))
            {
                Source = new NavigationTableSource(chapters)
            };
        Add(navigationList);
    }
}

public class NavigationTableSource : UITableViewSource
{
    private readonly IList<ChapterViewModel> _chapters;
    private const string CellIdentifier = "NavigationCell";

    public NavigationTableSource(IList<ChapterViewModel> chapters)
    {
        _chapters = chapters;
    }

    public override int RowsInSection(UITableView tableview, int section)
    {
        return _chapters.Count;
    }

    public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
    {
        var cell = tableView.DequeueReusableCell(CellIdentifier) ??
                   new UITableViewCell(UITableViewCellStyle.Default, CellIdentifier);
        // if there are no cells to reuse, create a new one
        cell.TextLabel.Text = _chapters[indexPath.Row].Title;
        cell.TouchesBegan += OnTouchesBegan;
        return cell;
    }
}

TouchesBegan是可以通過子類化UITableViewCell來重寫的方法:

public class CustomCell : UITableViewCell
{
    public CustomCell(UITableViewCellStyle style, NSString reuseIdentifier) : base(style, reuseIdentifier)
    {
    }

    public override void TouchesBegan(NSSet touches, UIEvent evt)
    {
        // do something

        base.TouchesBegan(touches, evt);
    }
}

然后在創建單元格時使用子類:

var cell = tableView.DequeueReusableCell(CellIdentifier) ??
               new CustomCell(UITableViewCellStyle.Default, CellIdentifier);

因此,我能夠管理此問題的方法是對UITableViewSource進行子類化。 我在那里覆蓋了RowSelected(UITableView tableView, NSIndexPath indexPath)

public class NavigationTableSource : UITableViewSource
{
    private readonly IList<ChapterViewModel> _chapters;
    private const string CellIdentifier = "NavigationCell";

    public NavigationTableSource(IList<ChapterViewModel> chapters)
    {
        _chapters = chapters;
    }

    public override int RowsInSection(UITableView tableview, int section)
    {
        return _chapters.Count;
    }

    public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
    {
        // todo: This is where we're going to load up the appropriate chapter.
        new UIAlertView("Row Selected", _chapters[indexPath.Row].Title, null, "OK", null).Show();
    }

    public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
    {
        var cell = tableView.DequeueReusableCell(CellIdentifier) ??
                   new UITableViewCell(UITableViewCellStyle.Default, CellIdentifier);
        // if there are no cells to reuse, create a new one
        cell.TextLabel.Text = _chapters[indexPath.Row].Title;
        return cell;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM