4

我来自非常精通的 Windows .NET 背景,我正在尝试使用 Monotouch,但我对如何响应事件感到非常困惑。我喜欢保持简单,我已经阅读了 Montouch 教程并查看了示例。我感到困惑的是如何响应事件。

假设我有一个带有 UIButton 和 UILabel 的 ViewController。当我按下按钮时,我想将标签更改为“单击按钮”。

因此,我可以执行以下操作:

public override void ViewDidLoad () {
     base.ViewDidLoad ();
     this.btnClickMe.TouchUpInside += (sender, e) => {
         this.lblOutput.Text = "Clicked @ " + DateTime.Now.ToShortTimeString ();
}

或者,我可以使用这种方法,我认为在响应 NavigationBars 等中按下的按钮时会更好地为我服务。在 IB 中,我 Ctrl-Drag 创建一个动作。然后我将 [Action] 方法移动到我的 .cs 文件并执行以下操作。

[Action ("btnClickMe_TouchUpInside:")]
public void btnClickMe_TouchUpInside (NSObject sender)
{
    this.lblOutput.Text = "Clicked @ " + DateTime.Now.ToShortTimeString ();
}

让我更困惑的是一些 UI 组件有一个 .delegate 成员。我可以添加一个事件。

什么是最好的方法,还是我完全糊涂了?如果是这样,有一个链接,您可以将我引导到我可以学习最佳实践、正确方法等的地方。

非常感谢

麦克风

4

1 回答 1

5

对于一个好的介绍,我推荐 Xamarin 关于事件、协议和委托的文章。

至于您将 Action Outlets 与将事件连接到 Reference Outlets 的问题,他们有这样的说法:

使用 .NET 事件与使用目标操作的主要区别在于,后者允许您将多个控件连接到单个操作方法。

所以,如果你正在构建一个快速而肮脏的计算器,你可能倾向于使用动作方法,并且按下数字 0-9 都做同样的事情——你可以从按钮上读取数字。(如果您曾经使用 VB 创建控件数组,您可能对这种技术很熟悉。)

也就是说,我发现我个人的偏好是坚持使用参考网点。它需要更少的思考和在 MonoDevelop 和 Interface Builder 之间来回走动。我放入一个 UISlider 并引用它,然后我可以从代码中访问它的所有属性和事件。因此,稍后可以从代码中进行挂钩。许多开发人员评论说他们倾向于不再使用 IB...

回到事实,MonoTouch 提供了多种与 UI 交互的冗余方式。对于那些来自 Objective-C 的人,你会发现熟悉的“Objective-C Delegates”和对“selectors”的引用。来自 C#,您通常可以忽略这些方法。但是,您应该花时间阅读那篇文章,以便熟悉 Apple 文档中使用的语言。例如,重要的是要注意“Objective-C Delegates”和“C# delegates”之间的区别。

委托用于 iOS 中的回调,类似于 .NET 使用事件的方式。为了使 iOS API 及其使用 Objective-C 委托的方式看起来更像 .NET,MonoTouch 在 iOS 中使用委托的许多地方公开了 .NET 事件。

随着时间的推移,我相信您会发现 API 灵活且适用于 .NET 模式。NS 类型和 .NET 类型之间的转换通常是透明的(例如,从 lambda 表达式到 NSAction)。

如果您需要更具体的信息,请告诉我。干杯。

于 2012-07-12T21:23:03.943 回答