单击处理程序 Xamarin

Posted

技术标签:

【中文标题】单击处理程序 Xamarin【英文标题】:Click Handler Xamarin 【发布时间】:2015-08-20 20:46:40 【问题描述】:

我正在尝试在我的 Xamarin.ios 应用程序中注册一个单击事件。我不想在这样的方法中注册事件。

http://developer.xamarin.com/recipes/ios/standard_controls/buttons/handle_clicks/

我想从情节提要中注册它们,似乎有这样做的功能。

在我的 ViewController 我有以下代码:

    public void ButtonPressed(object sender, EventArgs ea)
    
        UIAlertView error = new UIAlertView("Test Title", "This is a test", null, "Ok", null);
        error.Show();
    

当我运行应用程序并按下按钮时,appDelegate 中出现错误

Foundation.MonoTouchException:抛出 Objective-C 异常。姓名: NSInvalidArgumentException 原因:-[HomeViewController ButtonPressed:]: 无法识别的选择器发送到实例 0x14691650

如何注册点击事件?

【问题讨论】:

【参考方案1】:

检查你的 ViewController 的设计器文件,它会有这样的东西:

using Foundation;
using System;
using System.CodeDom.Compiler;
using UIKit;

namespace TEST

    [Register ("ViewController")]
    partial class ViewController
    
        [Action ("ButtonPressed:")]
        [GeneratedCode ("iOS Designer", "1.0")]
        partial void ButtonPressed (UIButton sender);

        void ReleaseDesignerOutlets ()
        
        
    

所以只需像这样实现该方法:

using System;
using UIKit;

namespace TEST

    public partial class ViewController : UIViewController
    
        public ViewController (IntPtr handle) : base (handle)
        
        

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

        partial void ButtonPressed (UIButton sender)
        
            Console.Write ("HEY mark this answer as accepted");
        
    

【讨论】:

谢谢,明天我回去工作的时候试试这个。 完美。唯一缺少的是由于某种原因我的设计器控制器未包含在项目文件中。一旦我将它添加到我的项目中,它就会编译并运行得很好。【参考方案2】:

检查您的 ViewController 的部分类。它应该是这样的:

[Action ("ButtonPressed:")]
[GeneratedCode ("iOS Designer", "1.0")]
partial void ButtonPressed (UIButton sender);

然后将partial 放入你的方法中:

public partial void ButtonPressed(object sender, EventArgs ea) 
    //...

【讨论】:

以上是关于单击处理程序 Xamarin的主要内容,如果未能解决你的问题,请参考以下文章

当我单击 QT 中的行时,如何分配单击事件处理程序?

单击处理程序 Xamarin

Jquery 合并单击事件处理程序

ActionScript 3 - 作为单击处理程序的匿名函数在每次单击时被多次调用

通过单击事件处理程序防止 routerLink 更改路由

如何将单击事件处理程序添加到从 javascript 创建的 userChat 类