gpt4 book ai didi

c# - 使用 DecelerationEnded 会干扰其他回调

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:21:50 24 4
gpt4 key购买 nike

我正在尝试将 DecelerationEnded 回调与 MT.Dialog 元素上的“Tapped”回调结合使用。我无法让两者同时工作。

当 DecelerationEnded 回调被注释掉时,'tapped' 回调起作用。当它被评论时,'tapped' 回调不会再被触发(而 DecelerationEnded 会)。

当 DecelerationEnded 调用移动到 Root 的设置之上时,按钮“点击”回调起作用,但 DecelerationEnded 回调不起作用。将回调设置延迟到 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”类,并通过覆盖 CreateSizingSource 来创建它,它应该提供你的类的一个新实例。这是您需要重写以提供相同行为但使用您自己的类的虚拟方法:

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

您可以将 SizingSource 子类化并覆盖减速方法的方法。

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

关于c# - 使用 DecelerationEnded 会干扰其他回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10832014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com