当我尝试使用UITapGestureRecognizer时,我的iOS模拟器崩溃了。
这是我的手势:
UITapGestureRecognizer tap = new UITapGestureRecognizer (new NSAction(delegate {
if(SettingsTapped != null){
SettingsTapped(this, EventArgs.Empty);
}
}));
我将此Gesture添加到UIView,然后将此视图添加到UITableViewCell。 触摸View后应用程序崩溃(每次),显示没有异常。
她是模拟器日志文件的输出:
Nov 4 10:49:47 administorsmini xXxXx[11073]: assertion failed: 13E28 12B411: libsystem_sim_trace.dylib + 19982 [BEE53863-0DEC-33B1-BFFB-8F7AE595CC73]: 0x4
Nov 4 10:49:49 administorsmini xXxXx[11073]: Stacktrace:
Nov 4 10:49:49 administorsmini xXxXx[11073]: at <unknown> <0xffffffff>
Nov 4 10:49:49 administorsmini xXxXx[11073]: at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication.UIApplicationMain (int,string[],intptr,intptr) <IL 0x000a6, 0xffffffff>
Nov 4 10:49:49 administorsmini xXxXx[11073]: at MonoTouch.UIKit.UIApplication.Main (string[],intptr,intptr) [0x00005] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:62
Nov 4 10:49:49 administorsmini xXxXx[11073]: at MonoTouch.UIKit.UIApplication.Main (string[],string,string) [0x00038] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:46
Nov 4 10:49:49 administorsmini xXxXx[11073]: at xXxXx.Application.Main (string[]) [0x00008] in /Users/Norman/Desktop/xXxXx/xXxXx/Main.cs:17
Nov 4 10:49:49 administorsmini xXxXx[11073]: at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x00050, 0xffffffff>
Nov 4 10:49:49 administorsmini xXxXx[11073]:
Native stacktrace:
Nov 4 10:49:49 administorsmini xXxXx[11073]:
=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================
Nov 4 10:49:49 administorsmini com.apple.CoreSimulator.SimDevice.27B5D497-B641-4BCA-8FA0-EF9E28E07143.launchd_sim[10951] (UIKitApplication:com.your-company.xXxXx[0x7041][11073]): Service exited due to signal: Abort trap: 6
Nov 4 10:49:49 administorsmini SpringBoard[10962]: Application 'UIKitApplication:com.your-company.xXxXx[0x7041]' crashed.
Nov 4 10:49:49 administorsmini assertiond[10966]: notify_suspend_pid() failed with error 7
Nov 4 10:49:49 administorsmini assertiond[10966]: assertion failed: 13E28 12B411: assertiond + 11523 [3F572A0B-7E12-378D-AFEE-EA491BAF2C36]: 0x1
我现在能做什么? 我不想在设备上开发......
修改
我最终通过覆盖UIView并使用其TouchesBegan()
方法。
有许多方法可以点击某些东西,但为什么我不能在上面使用这个呢?
答案 0 :(得分:1)
这是我在我的应用程序中使用的一些代码:
private void addTapGesture()
{
imgLogo.UserInteractionEnabled = true;
var tapGesture = new UITapGestureRecognizer(this, new Selector("ResendTrigger:"));
tapGesture.NumberOfTapsRequired = 5;
imgLogo.AddGestureRecognizer(tapGesture);
}
[Export("ResendTrigger:")]
public void ResendTrigger(UIGestureRecognizer sender)
{
System.Diagnostics.Debug.WriteLine("Triggered");}
}
构造函数的第一个参数(this)指向包含具有指定Export属性的方法的定义的对象,因此如果您将在视图中定义选择器和方法,如果您要调用的方法存在,则NSObject目标将引用您的视图单元格中的示例您的单元格引用将成为目标。
编辑
根据评论我假设您可能正在使用UITableViewSource。我认为你的情况与我的相似,所以尝试这种方法:
在你的UITableSource中声明事件类似于public event EventHandler<DataBaseModels.SavedActions> OnActionSelected;
的事件然后在getCell中为你的视图分配点击手势在内部方法中,您将引用发件人objec,将其强制转换为UIView并保留标记以识别相应的记录