【问题标题】:How to fire TouchUpInside of UIButton Programmatically in xamarin ios C#如何在 xamarin ios C# 中以编程方式触发 UIButton 的 TouchUpInside
【发布时间】:2015-01-09 02:32:33
【问题描述】:

我正在尝试以编程方式触发 Uibutton 的 touchupinside 事件。我怎样才能做到这一点 ?我尝试使用的代码使用 PerformSelector 但我收到此错误

"Error MT4117: The registrar found a signature mismatch in the method
 'VCPAckage2.ActivityViewController.TouchUpInsideEvent' - the
 selector 'TouchUpInsideEvent:' indicates the method takes 1
 parameters, while the managed method has 2 parameters. "

我想实现类似的目标

UIButton.FireEvent("TouchUpInsideEvent") - this will fire the TouchUpInsideEvent

UIButton.PerformSelector(new MonoTouch.ObjCRuntime.Selector ("TouchUpInsideEvent:"), null, 2000f);

这是代码

 private void LoadFn()
 {
    UIButton btnSubmit = new UIButton(new RectangleF(0,0,View.Frame.Width,40));
    btnSubmit.TouchUpInside+=TouchUpInsideEvent;
 }   

 [Export("TouchUpInsideEvent:")]
 private void TouchUpInsideEvent(object sender,EventArgs e){
 float yy = AppConstants.ZeroVal;
 if (FeedbackSubmittedReturnFlag == true) {
        yy =  ChildScrollView2.Subviews[1].Frame.Height+ChildScrollView2.Subviews[1].Frame.Y;
 }
     this.ParentScrollView.SetContentOffset (new PointF (View.Frame.Width, yy), false);
 }

【问题讨论】:

  • 你可以直接打电话给TouchUpInside(this, EventArgs.Empty); 还是因为某种原因你需要经历真实的事件?

标签: c# ios xamarin.ios uibutton xamarin


【解决方案1】:

下面的代码 sn-p 就足够了

btnObj.SendActionForControlEvents(UIControlEvent.TouchUpInside);

必须从主线程调用

【讨论】:

    【解决方案2】:

    上面有一些不同的东西。

    首先,MT4117 是正确的。发生这种情况是因为您的 [Export] 属性为只有一个参数的方法指定了一个选择器(即它只有一个 :),而托管方法有两个参数(这是 .NET 事件的默认值)。注册商将发现此类情况并报告错误。

    其次,PerformSelector 方法是对performSelector:... 选择器的绑定(大多数是在NSObject protocol 上定义的,而不是类)。因此,它们具有相同的限制(例如它们可以处理的参数数量)。

    第三,您可以通过多种方式调用自己的代码。一个简单的方法是,就像@jonathanpeppers 建议的那样,在需要时直接调用您的托管方法。

    另一种方法是调整您的代码以同时满足 12 要求,例如

    // assign one (two parameters) method as a .NET event
    btnSubmit.TouchUpInside += TouchUpInsideEvent;
    ...
    // call another (one parameter) method like a selector
    any_nsobject.PerformSelector (new Selector ("TouchUpInsideEvent:"), sender as NSObject, 0f);
    ...
    
    // have the 2 parameters method call the(1 parameter) export'ed method
    private void TouchUpInsideEvent (object sender, EventArgs e)
    {
        TouchUpInsideEvent (sender as NSObject);
    }
    
    [Export ("TouchUpInsideEvent:")]
    private void TouchUpInsideEvent (NSObject sender)
    {
        Console.WriteLine ("yay!");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      • 2019-05-10
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多