使用减速结束会干扰其他回调

本文关键字:干扰 其他 回调 结束 | 更新日期: 2023-09-27 18:36:04

我正在尝试将减速结束回调与MT上的"点击"回调结合使用。对话框元素。我不能让两者同时工作。

当减速结束回调

被注释掉时,"点击"回调将起作用。当它被注释时,"点击"回调不再被触发(而减速结束)。

当减速结束

调用移动到根设置上方时,"点击"按钮回调有效,但减速结束回调不起作用。将回调设置推迟到 ViewWillAppear 也不会解决任何问题。

有什么解决办法吗?

示例代码:

public class TestController : DialogViewController
{
    public TestController () : base(UITableViewStyle.Plain, null, true)
    {
        // Create list of 20 buttons.
        Section s = new Section();
        for (int i = 0; i < 20; i++ )
        {
            s.Add(new StringElement("test " + i, () => {
                Console.WriteLine("Tapped"); // Tapped callback.
            }));
        }
        Root = new RootElement("Test") {s};
        // The following line causes all the "tapped" handlers to not work.
        this.TableView.DecelerationEnded += HandleDecelerationEnded;
    }
    void HandleDecelerationEnded (object sender, EventArgs e)
    {
        Console.WriteLine ("Deceleration Ended");
    }
}

使用减速结束会干扰其他回调

在 MonoTouch 中,您可以使用 C# 风格的回调或 Objective-C 风格的回调,但它们不能混合在一起:

http://docs.xamarin.com/ios/advanced_topics/api_design#Delegates

在内部,MonoTouch.Dialog 库通过提供处理所有事件的完整子类来实现其功能。 如果使用 C# 语法,它会将内置处理程序替换为代理,在这种情况下,代理仅响应 DecelerationEnded。

如果你想连接到这个,你需要对现有的"Source"类进行子类化,并通过覆盖CreateSsizeSource来创建它,它应该提供你的类的新实例。 这是您需要重写的虚拟方法,以提供相同的行为,但使用您自己的类:

public virtual Source CreateSizingSource (bool unevenRows)
{
    return unevenRows ? new SizingSource (this) : new Source (this);
}

您可以只对 SsizeSource 进行子类化,并覆盖减速方法的方法。

TweetStation有一个示例来展示如何完成此操作:它使用相同的事件来确定何时从屏幕中删除未读推文的数量。