Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在选项卡中使用相同的UIView?_Iphone_Uiview_Uitabbarcontroller_Instance - Fatal编程技术网

Iphone 如何在选项卡中使用相同的UIView?

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

我有一个小UIView,我用一些来自网络的字符串数据填充它。 我只想装一次。这就是我在appdelegate类中调用它的原因

CurrencyView*CurrencView

@属性(非原子,保留)CurrencyView*CurrencView

在应用程序中,使用选项完成启动:

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?我想我可以复制它,不是吗?