Обновление IBOutlet на главном виде из дополнительного вида - PullRequest
1 голос
/ 29 января 2012

У меня есть главный вид, на котором есть UISlider.

На главном экране я добавляю подпредставление, используя:

gameView *myViewController = [[gameView alloc] initWithNibName:@"gameView" bundle:nil];
[self.view addSubview:myViewController.view];

Подвид создается поверх основного вида.

Когда я удаляю подвид, используя:

[self.view removeFromSuperview];

основной вид снизу становится видимым.

Я хочу иметь возможность обновить значение UISlider в главном представлении из вспомогательного представления, прежде чем я вызову [self.view removeFromSuperview]

Возможно ли это?

По существу, вопрос можно обобщить на вопрос о том, как обновить IBOutlet на главном представлении из вспомогательного представления.

Помощь очень ценится. Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 29 января 2012

Вот еще один способ:

Я не уверен, что представляет слайдер, но вам нужно создать объект, который представляет это

@interface MyGameThing : NSObject
@property (assign) CGFloat myValue;
@end 

@implementation MyGameThing {
   CGFloat *_value;
}
@synthesize myValue = _myValue;
@end

Затем вам нужно передать этот объект обоим контроллерам представления (или сделать его одиночным).

Затем в ParentViewController в viewWillAppear просто установите ползунок на новое значение.

Daniel.

(p.s. Не просто добавьте представления контроллеров представления к суперпредставлению, используйте presentModalViewController / dismissModalViewController или контроллер навигации).

0 голосов
/ 29 января 2012

Да, это возможно.

И есть несколько способов сделать это.Вот как я бы это сделал:

Во-первых, сделайте свойство UISlider вашего родительского контроллера доступа доступным для других объектов.

Во-вторых, присвойте вашему gameView объекту переменную экземплярачто вы свяжетесь с родительским представлением (назовем его id savedParent;)

Затем, прежде чем сделать removeFromSuperview, вы можете просто сделать что-то вроде:

ParentViewController * parentVC = (ParentViewController *) savedParent;
if(parentVC)
{
    // some float value of whatever you want to set the slider value to
    parentVC.slider.value = 0.5f; 
}

Кроме того,почему вы создаете экземпляр всего объекта View Controller (gameView), если вы просто хотите добавить подпредставление?Когда вы делаете вызов removeFromSubview, представление удаляется, но ваш контроллер представления gameView не освобождается (и может даже потеряться и просочиться в память, что приведет к сбою).Если вы хотите сделать подпредставление, подкласс UIView.Если вы хотите выдвинуть новый контроллер представления, нажмите весь контроллер (а не только представление, которое он содержит).

...