我有一个小的UIView,我用net填充了一些字符串数据。 我想加载一次。这就是为什么我在appdelegate类中调用它。
CurrencyView * currView;
@property(非原子,保留)CurrencyView * currView;
应用程序中的didFinishLaunchingWithOptions:
CurrencyView *view=[[CurrencyView alloc] initWithFrame:CGRectMake(0, 0, 100, 20)];
self.currView = view;
[view release];
然后我在每个viewcontroller中调用它(在标签中)。
AppDelegate_iPhone *delegate = [AppDelegate_iPhone sharedAppDelegate];
self.currencyView= delegate.currView
[self.view addSubview: currencyView];
当我在标签中移动时,currView从标签移动到其他标签。当回顾上一个标签时,currencyview消失了。它停留在最后一个标签上。我不知道为什么。
如何将currview放在所有视图中?
答案 0 :(得分:0)
你不能同时将UIView放到不同的控制器上。当您将其添加到另一个控制器/视图时,它将从之前的控制器/视图中删除。
所以你应该在更改tab ^^时重新添加它(例如,使用委托方法。这取决于你使用的是什么; - )
我认为没有其他解决办法,但如果有人有更好的想法,我会感兴趣。
答案 1 :(得分:0)
如果要共享同一个视图实例,可以在viewcontroller viewWillAppear:方法中从appdelegate中检索实例,检查视图的superview是否为nil并最终将其从superview中删除,然后将其添加到当前视图。像这样的东西
-(void)viewWillAppear {
AppDelegate_iPhone *delegate = [AppDelegate_iPhone sharedAppDelegate];
CurrencyView *cView = [delegate currView];
if(nil!=[cView superview) {
[cView removeFromSuperview];
}
[[self view]addSubview:cView];
}
也许您可以从 viewWillDisappear:方法中的superview中删除currView,而不是上面的方法。
尽管如此,这仍然非常容易出错并且不是很干净。如果你只分配两个CurrencyView实例并让它们共享公共数据/模型会更好。 如果内存不足,我怀疑单个视图会杀死你的应用程序,但如果是这种情况还有其他减少内存占用的方法,请参阅Apple关于内存管理和查看控制器生命周期的文档。
答案 2 :(得分:0)
如果您想要的是视图的副本,* cView的@property语句应为
@Property (nonatomic, copy) UIView* cView;
如果您拥有的是
@Property (nonatomic, retain) UIView* cView;
您正尝试在多个视图中共享同一个对象,而这是您无法做到的。有了前者,每次你从superview中获取它,你都会复制它,我认为这样可行。