该应用是基于视图的项目类型。 我在View XIB(UIView Nib)中使用NSObject,假设此对象是应用程序的顶部栏。
MainController UIViewController加载初始屏幕。 它看起来像这样,
UIViewController MainViewController Image
我想加载一个顶视图(新视图,称之为X)在上图中的顶部视图(红色)中单独设计。
现在,我有NSObject驻留在“X”内并绑定所有事件并完全控制X,它是一个单例对象。
在NSObject类中,我有一个返回自身对象实例的方法和它控制的uiview(“X”)实例。
方法是,
-(UIView*)ReturnTopBarView
{
NSLog(@"called 2");
return topBarObject.topBarView;
}
//Provides the top bar instance to all the view controllers.
//Singleton Implementation.
+ (id)GetTopBarObject
{
if(topBarObject == nil)
{
NSLog(@"called 1");
return [[TopBarObject alloc] init];
}
return topBarObject;
}
顶部视图是完全设计的顶部视图(“X”),它必须位于主视图控制器的顶部视图中(上图中的红色部分)。
我在主视图控制器中写了一个方法:
-(void)SetHomeScreen
{
self.topView = [[TopBarObject GetTopBarObject] ReturnTopBarView];
}
我在我的appdelegate.applicationdidfinishlaunching中调用-(void)SetHomeScreen
为[viewcontroller SetHomeScreen]
这实际上调用了NSObject(TopBarObject类)中的相应方法,但是我没有看到更新的视图 (mainviewcontroller.topbarview)。这是现在的主要问题。
我有一个自定义顶栏和自定义底栏,带有图像和图标。所以我选择了这种设计方式。 我不确定这是否是最好的方法,我只是在寻求最佳的系统设计,以使这项工作更有效率。如果您认为还有其他方法远远不如此,请与我分享。
答案 0 :(得分:0)
我看到单身人士不正确。 它应该是这样的:
+ (id)GetTopBarObject {
if(topBarObject == nil) {
topBarObject = [[TopBarObject alloc] init];
}
return topBarObject;
}
在你的代码中,topBarObject永远不会被启动,因此每次调用GetTopBarObject时它都会生成一个新的TopBarObject并返回它......
答案 1 :(得分:0)
appdelegate.applicationdidfinishlaunching在哪里调用?
如果您在视图实际设置之前进行呼叫,那么您所做的就是设置nil。
试试吧
viewcontroller.view;
之前
[viewcontroller SetHomeScreen]