gpt4 book ai didi

c# - 使用 UINavigationController(Type navigationBarType, Type toolbarType) 构造函数指定自定义导航栏

转载 作者:太空宇宙 更新时间:2023-11-03 19:12:43 25 4
gpt4 key购买 nike

我正在尝试使用 UINavigationController(Type navigationBarType, Type toolbarType) 构造函数来指定自定义 UINavigationBar 派生类,在 C# 中定义。

但是,我的所有尝试都会导致空引用异常。我认为这与没有为我的托管类找到 native 类有关吗?

if (UIDevice.CurrentDevice.CheckSystemVersion(7, 0))
rootNavController = new UINavigationController(typeof(UnderlayNavigationBar), null);
else
rootNavController = new UINavigationController();

传递默认的 typeof(UIToolbar) 而不是第二个 null 参数也无济于事。

System.NullReferenceException: Object reference not set to an instance of an object
at MonoTouch.ObjCRuntime.Runtime.ConstructNSObject[NSObject] (IntPtr ptr, System.Type type, MissingCtorResolution missingCtorResolution) [0x00037] in /Developer/MonoTouch/Source/monotouch/src/ObjCRuntime/Runtime.cs:365
at MonoTouch.ObjCRuntime.Runtime.ConstructNSObject (IntPtr ptr, IntPtr klass, MissingCtorResolution missingCtorResolution) [0x00013] in /Developer/MonoTouch/Source/monotouch/src/ObjCRuntime/Runtime.cs:348
at MonoTouch.ObjCRuntime.Runtime.GetNSObject (IntPtr ptr, MissingCtorResolution missingCtorResolution) [0x00021] in /Developer/MonoTouch/Source/monotouch/src/ObjCRuntime/Runtime.cs:430
at MonoTouch.ObjCRuntime.Runtime.TryGetOrConstructNSObjectWrapped (IntPtr ptr) [0x00000] in /Developer/MonoTouch/Source/monotouch/src/ObjCRuntime/Runtime.cs:658
at at (wrapper native-to-managed) MonoTouch.ObjCRuntime.Runtime:TryGetOrConstructNSObjectWrapped (intptr)
at at (wrapper managed-to-native) MonoTouch.ObjCRuntime.Messaging:void_objc_msgSend_IntPtr (intptr,intptr,intptr)
at MonoTouch.UIKit.UINavigationController.set_ViewControllers (MonoTouch.UIKit.UIViewController[] value) [0x00028] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UINavigationController.g.cs:345

如果有人对我为什么使用这个构造函数感兴趣,我正在移植这个指南:http://b2cloud.com.au/how-to-guides/custom-uinavigationbar-colors-in-ios7

最佳答案

我应该更详细地阅读调用堆栈,尤其是 GetNSObject (IntPtr ptr, MissingCtorResolution missingCtorResolution)

现在完全有道理。该实例是在 native 代码中构造的,因此需要采用 native 实例的 IntPtr 的托管构造函数重载。将该构造函数添加到我的派生类中解决了这个问题。

public UnderlayNavigationBar(IntPtr handle) : base(handle)
{
}

关于c# - 使用 UINavigationController(Type navigationBarType, Type toolbarType) 构造函数指定自定义导航栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19439705/

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