Iphone 如何在选项卡中使用相同的UIView?
我有一个小UIView,我用一些来自网络的字符串数据填充它。 我只想装一次。这就是我在appdelegate类中调用它的原因 CurrencyView*CurrencView @属性(非原子,保留)CurrencyView*CurrencView 在应用程序中,使用选项完成启动:Iphone 如何在选项卡中使用相同的UIView?,iphone,uiview,uitabbarcontroller,instance,Iphone,Uiview,Uitabbarcontroller,Instance,我有一个小UIView,我用一些来自网络的字符串数据填充它。 我只想装一次。这就是我在appdelegate类中调用它的原因 CurrencyView*CurrencView @属性(非原子,保留)CurrencyView*CurrencView 在应用程序中,使用选项完成启动: CurrencyView *view=[[CurrencyView alloc] initWithFrame:CGRectMake(0, 0, 100, 20)]; self.currView = view; [vie
CurrencyView *view=[[CurrencyView alloc] initWithFrame:CGRectMake(0, 0, 100, 20)];
self.currView = view;
[view release];
然后我在每个viewcontroller中调用它(在选项卡中)
当我在选项卡中移动时,currView会从一个选项卡移动到另一个选项卡。当回顾上一个选项卡时,currencyview将消失。它停留在最后一页。我不知道为什么
在所有视图中放置currview应该怎么做?不能在同一时刻将UIView放置到不同的控制器。将其添加到另一个控制器/视图时,它将从上一个控制器/视图中删除 因此,当您更改tab^^^时,应该重新添加它(例如,通过使用委托方法。这取决于您使用的是什么;-))
我认为没有其他解决方案,但如果有人有更好的想法,我会感兴趣。您不能在同一时刻将UIView放置到不同的控制器。将其添加到另一个控制器/视图时,它将从上一个控制器/视图中删除 因此,当您更改tab^^^时,应该重新添加它(例如,通过使用委托方法。这取决于您使用的是什么;-))
我认为没有其他解决方案,但如果有人有更好的想法,我会感兴趣。如果要共享同一个视图实例,可以从viewcontroller ViewWillDisplay:方法中的appdelegate中检索实例,检查视图的superview是否为零,并最终将其从superview中删除,然后将其添加到当前视图中。像这样的
-(void)viewWillAppear {
AppDelegate_iPhone *delegate = [AppDelegate_iPhone sharedAppDelegate];
CurrencyView *cView = [delegate currView];
if(nil!=[cView superview) {
[cView removeFromSuperview];
}
[[self view]addSubview:cView];
}
也许您可以在ViewWillEnglishe:方法(而不是上述方法)中从superview中删除currView
尽管如此,这仍然非常容易出错,而且不太干净。如果您只分配两个CurrencyView实例,并让它们共享公共数据/模型,这会更好。
如果内存不足,我怀疑单一视图会扼杀你的应用程序,但如果是这样,还有其他方法可以减少内存占用,请参阅苹果关于内存管理和视图控制器生命周期的文档。如果你想共享同一个视图实例,您可以从viewcontroller ViewWillDisplay:方法中的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];
}
也许您可以在ViewWillEnglishe:方法(而不是上述方法)中从superview中删除currView
尽管如此,这仍然非常容易出错,而且不太干净。如果您只分配两个CurrencyView实例,并让它们共享公共数据/模型,这会更好。
如果您的内存不足,我怀疑单一视图会扼杀您的应用程序,但如果是这种情况,有其他方法可以减少内存占用,请参阅苹果关于内存管理和视图控制器生命周期的文档。如果您想要的是视图的副本,那么您的*cView的@property语句应该是
@Property (nonatomic, copy) UIView* cView;
如果你所拥有的是
@Property (nonatomic, retain) UIView* cView;
您试图在多个视图中共享同一对象,但这是无法做到的。对于前者,每次您从superview中获取它时,您都将制作一份副本,我认为这会起作用。如果您想要的是视图的副本,那么您的*cView的@property语句应该是
@Property (nonatomic, copy) UIView* cView;
如果你所拥有的是
@Property (nonatomic, retain) UIView* cView;
您试图在多个视图中共享同一对象,但这是无法做到的。对于前者,每次你从superview中抓取它时,你都会复制它,我认为这会起作用。我不会同时放置它,当我移动到第二个选项卡时,在它的viewdidload方法中,我使用[self.view addSubview:currencyView];但是currview从第一个标签中删除了。是的,这就是我想说的。您不能同时在两个不同的位置拥有UIView。(或者你必须做两个不同的alloc)嗯,为什么?我不能在不同的视图中使用相同的UIView复制吗?我还试着为每个选项卡的ViewController(CurrencyView alloc init等)创建实例,然后设置“self.currenyView=delegate.currView”),但都是一样的。为什么我不能使用相同的uiview?我想我可以复制它,不是吗?我没有在同一时刻将它放在第二个选项卡上,在它的viewdidload方法中,我使用[self.view addSubview:currencyView];但是currview从第一个选项卡视图conroller中被删除。是的,这就是我想说的。你不能在同一时间在两个不同的地方拥有一个UIView。(或者你必须做两个不同的alloc)。嗯,为什么?我不能在不同的视图中使用相同的UIView副本吗?我还尝试为每个选项卡视图控制器创建实例(CurrencyView alloc init等)然后我设置了“self.currenyView=delegate.currView”),但事情是一样的。为什么我不能使用相同的uiview?我想我可以复制它,不是吗?