Xamarin.ios 单触式-滑动手势编程

Xamarin.ios 单触式-滑动手势编程,xamarin.ios,Xamarin.ios,我正在为IPAD应用程序开发一个控件(我第一次做苹果开发)。它是一个模拟网格的简单控件,由一组UIView(每个视图代表一个单元格)组成,所有这些视图都添加到父UIView中(以类似网格的方式) 其中一个要求是实现滑动手势——用户在网格上滑动以激活/禁用单元格——这对应于数据库中的1/0 我创建了一个UISwipe手势,并将其添加到表示单元格的每个UIView中。这似乎是一种不正确的方法,因为它为发起刷卡的UIView触发事件,但不是跨所有UIView 我的理解是,我需要在包含所有这些子UIVi

我正在为IPAD应用程序开发一个控件(我第一次做苹果开发)。它是一个模拟网格的简单控件,由一组UIView(每个视图代表一个单元格)组成,所有这些视图都添加到父UIView中(以类似网格的方式)

其中一个要求是实现滑动手势——用户在网格上滑动以激活/禁用单元格——这对应于数据库中的1/0

我创建了一个UISwipe手势,并将其添加到表示单元格的每个UIView中。这似乎是一种不正确的方法,因为它为发起刷卡的UIView触发事件,但不是跨所有UIView


我的理解是,我需要在包含所有这些子UIView的父UIView中实现SwipeTesture。但是,如果我这样做,我怎么知道哪个子UIView被刷过?或者任何其他有意义的方法?

这可能无法回答您的问题,但我可以用类似的用例来说明我在这里采用的方法:

1) 我会放弃UIScrollView而使用UITableView。您会注意到UITableView继承了UIScrollView,并具有虚拟化和单元/视图重用的所有性能优势。当您致力于优化应用程序以提高设备性能时,您会发现它非常有用

2) 利用UITableViewCell的ContentView创建自定义“网格”单元格。或者更好的方法是,如果不需要特别创建网格行,可以使用MonoTouch.Dialog

3) 使用此(道具@praeclarum)在MonoTouch中设置手势。实际上,您提供了一个UIgestureRecognitor作为泛型参数。然后,您可以使用LocationInView方法在UITableView中获取发生手势的点

public void HandleSwipe(UISwipeGestureRecognizer recognizer)
{
    if(recognizer.State == UIGestureRecognizerState.Ended) {

        var point = recognizer.LocationInView(myTableView);
        var indexPath = myTableView.IndexPathForRowAtPoint(point);

        // do associated calculations here
    }
}

我认为您是正确的,手势识别器必须连接到父视图。在与手势识别器关联的动作方法中,我认为您可以使用与CGRectContainsPoint()相当的Monotouch来确定是否在特定子视图中发生了滑动。我想您必须迭代子视图,直到找到发生滑动的子视图。我不知道有什么方法可以立即识别被刷过的子视图。

我知道这个线程相当旧,但我创建了一个扩展方法,可能会有所帮助

View.Swipe(UISwipeGestureRecognizerDirection.Right).Event += Swipe_Event;

void Swipe_Event(ViewExtensions.SwipeClass sender, UISwipeGestureRecognizer recognizer)
{
    View view = sender.View; // do something with view that was swiped.
}

我使用了这种扩展方法,并将其添加到每个monotouch.dialog元素中,效果非常好!