gpt4 book ai didi

c# - uipopover Controller 正在分配单点触控

转载 作者:行者123 更新时间:2023-12-01 19:06:36 26 4
gpt4 key购买 nike

我认为,我遇到了一个问题,即在释放UIPopoverController之前将其重新分配,这很奇怪,因为UIPopoverController是一个类变量。任何帮助将不胜感激。

这是错误,我正在

MonoTouch.Foundation.MonoTouchException: Objective-C exception thrown.  Name: NSGenericException Reason: -[UIPopoverController dealloc] reached while popover is still visible.
at at (wrapper managed-to-native) MonoTouch.Foundation.NSObject:monotouch_release_managed_ref (intptr)
at MonoTouch.Foundation.NSObject.ReleaseManagedRef () [0x00000] in /Developer/MonoTouch/Source/monotouch/src/Foundation/NSObject.cs:99
at MonoTouch.Foundation.NSObject+NSObject_Disposer.Drain (MonoTouch.Foundation.NSObject ctx) [0x00062] in /Developer/MonoTouch/Source/monotouch/src/shared/Foundation/NSObject2.cs:602
at at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0004c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38
at Lab_assistant.Application.Main (System.String[] args) [0x00008] in /working/Lab_assistant/Main.cs:17

这是 class ,我正在上课
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;

namespace Lab_assistant
{
[Register("ViewView")]
public class ViewView:UIView
{
public Block _b { set; get;}
public EventHandler _touched;
private UIView _popViewText;
private UIViewController _Controller;
private UIPopoverController _popUp;
Boolean edit;

public ViewView (Block b,BlockManger.Del TheMethod)
{
_b = b;
this.Frame = b._location;
this.BackgroundColor = UIColor.White;
this.AddGestureRecognizer (new UILongPressGestureRecognizer (tapped));
TheMethod (_b,this);
this.Frame = new System.Drawing.RectangleF(b._location.Location, new System.Drawing.SizeF (b._location.Width, b._location.Height + 2));
}

[Export("tapped")]
protected void tapped(UIGestureRecognizer sender)
{
TouchOccoured ();
}

public void Edit()
{
UIButton btn = new UIButton (UIButtonType.RoundedRect);
_popViewText = new UIView(new System.Drawing.RectangleF(new System.Drawing.PointF(0,0), new System.Drawing.SizeF(200,200)));
_popViewText.BackgroundColor = UIColor.DarkGray;
btn.Hidden = false;
btn.Frame = new System.Drawing.RectangleF(new System.Drawing.PointF(0,31),new System.Drawing.SizeF(100,30));
btn.SetTitle ("Remove", UIControlState.Normal);

UIButton btn2 = new UIButton (UIButtonType.RoundedRect);
btn2.Hidden = false;
btn2.Frame = new System.Drawing.RectangleF(new System.Drawing.PointF(0,0),new System.Drawing.SizeF(100,30));
btn2.SetTitle ("Resize", UIControlState.Normal);

_popViewText.AddSubview (btn);
_popViewText.AddSubview (btn2);
_Controller = new UIViewController ();
_Controller.Add (_popViewText);
_popUp = new UIPopoverController(_Controller);

btn.TouchUpInside += (object sender, EventArgs e) =>
{
this.RemoveFromSuperview();
edit = false;
};
}

public void EditBlock()
{
if (!edit)
{
edit = true;
_popUp.PopoverContentSize = new SizeF (200, 200);
_popUp.PresentFromRect (new System.Drawing.RectangleF (new PointF(0,0), new System.Drawing.SizeF (20, 20)), this, UIPopoverArrowDirection.Left, true);
//_popViewText = new UIView (rec);
}
}

public void TouchOccoured()
{
if(_touched != null)
{
this.Edit ();
this.EditBlock ();

_touched (this, null);
}
}
}
}

非常感谢您的帮助

最佳答案

我打赌Edit被多次调用,导致实例化了多个UIPopoverController。如果是这样,您可以使用以下方法修复它:

public void Edit ()
{
if (_popup != null && _popup.PopoverVisible) {
_popup.Dismiss (false);
_popup.Dispose();
}

//your code
}

关于c# - uipopover Controller 正在分配单点触控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19221148/

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