как использовать тот же UIView во вкладках? - PullRequest
2 голосов
/ 26 сентября 2010

У меня есть небольшой UIView, я заполняю его некоторыми строковыми данными из сети. Я хочу, чтобы это загрузить только один раз. вот почему я называю это в классе appdelegate.

CurrencyView * currView;

@ свойство (неатомное, сохраняемое) 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 перемещается от вкладки к другой вкладке. Когда вы вернетесь к предыдущей вкладке, просмотр валюты исчезнет. он остается на последней вкладке. я не знаю почему.

что я должен сделать, чтобы поместить currview во все представления?

Ответы [ 3 ]

0 голосов
/ 26 сентября 2010

Если вы хотите предоставить общий доступ к одному и тому же экземпляру представления, вы можете извлечь экземпляр из приложения appdelegate в методе viewcontroller viewWillAppear: , проверьте, не является ли суперпредставление представления нолем, и в конечном итоге удалите его из суперпредставления затем добавьте его в текущий вид. Как то так

-(void)viewWillAppear {

AppDelegate_iPhone *delegate = [AppDelegate_iPhone sharedAppDelegate];
CurrencyView *cView = [delegate currView];
if(nil!=[cView superview) {
[cView removeFromSuperview];
}
[[self view]addSubview:cView];
}

Возможно, вы можете удалить currView из суперпредставления в методе viewWillDisappear: , а не в приведенном выше.

Тем не менее, это остается очень подверженным ошибкам и не очень чистым. Было бы лучше, если вы просто выделите два экземпляра CurrencyView и позволите им совместно использовать общие данные / модель. Если у вас мало памяти, я сомневаюсь, что одно представление убьет ваше приложение, но в этом случае есть другой способ уменьшить объем памяти, см. Документацию Apple по управлению памятью и просмотр жизненного цикла контроллера.

0 голосов
/ 26 сентября 2010

Если вы хотите получить копию представления, ваш оператор @property для * cView должен быть

@Property (nonatomic, copy) UIView* cView;

если вместо этого есть

@Property (nonatomic, retain) UIView* cView;

Вы пытаетесь разделить один и тот же объект в нескольких представлениях, чего вы не можете сделать. Что касается первого, то каждый раз, когда вы берете его из суперпредставления, вы делаете его копию, и я думаю, что это сработает.

0 голосов
/ 26 сентября 2010

Вы не можете установить UIView на другой контроллер одновременно.Когда вы добавляете его в другой контроллер / представление, он будет удален из предыдущего.

Таким образом, вы должны повторно добавить его при изменении вкладки ^^ (например, с помощью метода делегата.зависит от того, что вы используете; -))

Я думаю, что нет другого решения, но если у кого-то есть идея получше, она может заинтересовать меня.

...