Monotouch:以编程方式使用动态 ViewControllers 创建 UITabbar
Posted
技术标签:
【中文标题】Monotouch:以编程方式使用动态 ViewControllers 创建 UITabbar【英文标题】:Monotouch: Create UITabbar with dynamic ViewControllers programmatically 【发布时间】:2011-12-29 15:19:39 【问题描述】:我尝试了很多方法并通过网络搜索但没有成功。这是我尝试过的最简单的方法,但无法运行:
如果我运行此代码,它会正确显示 Tabbar,但是当我单击选项卡时会出现异常,我将其粘贴在以下代码示例下。
这是我的 MainMenu.cs 中的一个方法,它是 xib 条目。
感谢您对此提供的任何帮助。非常感谢您!
private void Render_Screen (object sender, RenderScreenEventArgs e)
UITabBarController tabbarController = new UITabBarController();
UINavigationController navController1 = new UINavigationController();
UINavigationController navController2 = new UINavigationController();
UIViewController a = new UIViewController();
a.TabBarItem = new UITabBarItem(UITabBarSystemItem.Contacts, 0);
UIViewController b = new UIViewController();
b.TabBarItem = new UITabBarItem(UITabBarSystemItem.Favorites, 1);
UIViewController[] arrayA = new UIViewController[] a ;
UIViewController[] arrayB = new UIViewController[] b ;
navController1.ViewControllers = arrayA;
navController2.ViewControllers = arrayB;
UINavigationController[] arrayC = new UINavigationController[] navController1, navController2 ;
tabbarController.ViewControllers = arrayC;
InvokeOnMainThread (delegate
this.View.AddSubview (tabbarController.View);
);
Stacktrace:
at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication.UIApplicationMain (int,string[],intptr,intptr) <IL 0x0009f, 0xffffffff>
at MonoTouch.UIKit.UIApplication.Main (string[],string,string) [0x00042] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:29
at NotifyMe.Application.Main (string[]) [0x00000] in /Users/hschulz/Projects/NotifyMe/NotifyMe/Main.cs:16
at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x00050, 0xffffffff>
Native stacktrace:
0 NotifyMe 0x000e1008 mono_handle_native_sigsegv + 408
1 NotifyMe 0x00011c7f mono_sigsegv_signal_handler + 351
2 libsystem_c.dylib 0x9753459b _sigtramp + 43
3 ??? 0xffffffff 0x0 + 4294967295
4 UIKit 0x022a955a -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 61
5 UIKit 0x024ce569 -[UITabBar _sendAction:withEvent:] + 466
6 CoreFoundation 0x012d8ec9 -[NSObject performSelector:withObject:withObject:] + 73
7 UIKit 0x022a95c2 -[UIApplication sendAction:to:from:forEvent:] + 96
8 UIKit 0x022a955a -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 61
9 UIKit 0x0234eb76 -[UIControl sendAction:to:forEvent:] + 66
10 UIKit 0x0234f03f -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 503
11 UIKit 0x0234ebab -[UIControl sendActionsForControlEvents:] + 48
12 UIKit 0x024d0d1f -[UITabBar(Static) _buttonUp:] + 123
13 CoreFoundation 0x012d8ec9 -[NSObject performSelector:withObject:withObject:] + 73
14 UIKit 0x022a95c2 -[UIApplication sendAction:to:from:forEvent:] + 96
15 UIKit 0x022a955a -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 61
16 UIKit 0x0234eb76 -[UIControl sendAction:to:forEvent:] + 66
17 UIKit 0x0234f03f -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 503
18 UIKit 0x0234e2fe -[UIControl touchesEnded:withEvent:] + 549
19 UIKit 0x022cea30 -[UIWindow _sendTouchesForEvent:] + 513
20 UIKit 0x022cec56 -[UIWindow sendEvent:] + 273
21 UIKit 0x022b5384 -[UIApplication sendEvent:] + 464
22 UIKit 0x022a8aa9 _UIApplicationHandleEvent + 8196
23 GraphicsServices 0x048a0fa9 PurpleEventCallback + 1274
24 CoreFoundation 0x012ab1c5 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53
25 CoreFoundation 0x01210022 __CFRunLoopDoSource1 + 146
26 CoreFoundation 0x0120e90a __CFRunLoopRun + 2218
27 CoreFoundation 0x0120ddb4 CFRunLoopRunSpecific + 212
28 CoreFoundation 0x0120dccb CFRunLoopRunInMode + 123
29 GraphicsServices 0x0489f879 GSEventRunModal + 207
30 GraphicsServices 0x0489f93e GSEventRun + 114
31 UIKit 0x022a6a9b UIApplicationMain + 1175
32 ??? 0x0e05a305 0x0 + 235250437
33 ??? 0x0e058b90 0x0 + 235244432
34 ??? 0x0e058888 0x0 + 235243656
35 ??? 0x0e0589de 0x0 + 235243998
36 NotifyMe 0x000119cf mono_jit_runtime_invoke + 1407
37 NotifyMe 0x0022014a mono_runtime_invoke + 170
38 NotifyMe 0x00222e81 mono_runtime_exec_main + 705
39 NotifyMe 0x00222091 mono_runtime_run_main + 929
40 NotifyMe 0x000ad5bf mono_jit_exec + 239
41 NotifyMe 0x002f41aa main + 5194
42 NotifyMe 0x00003035 start + 53
=================================================================
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.
=================================================================
【问题讨论】:
【参考方案1】:该异常是因为您的应用程序是使用 5.0 SDK 构建的,但您使用的是 4.3 SDK 运行。几周前我遇到了这个问题。
为了解决这个问题,当模拟器通知您崩溃时,会有一个按钮显示“切换 SDK”。选择它,然后它将向您显示可用的 SDK。从列表中选择 5.0。重新启动,这将解决您的问题。
【讨论】:
嗨,米格尔,感谢您的回复!我找不到切换 SDK 按钮,而是在“iPhone Build”下的主项目选项中将其从默认切换到 5.0,但没有解决它。您能否更详细地描述一下您提到的按钮在哪里?我正在使用 Mono Develop 2.8.5 和 MonoTouch 5.0.4。提前致谢!【参考方案2】:似乎在外面声明工具栏可以解决我的问题。
public class test
UITabBarController tabbarController;
privat void RenderScreen()
...
【讨论】:
以上是关于Monotouch:以编程方式使用动态 ViewControllers 创建 UITabbar的主要内容,如果未能解决你的问题,请参考以下文章