Мне нужно, чтобы представление (infoView) отображалось как наложение поверх другого представления.Поскольку этот infoView должен вызываться из любого представления приложения (например, introView), я бы хотел, чтобы код был в VC infoViews и просто вызывал его методы, когда происходит действие в currentView (introView).Я не могу использовать push и pop, так как мне нужно изменить цвет фона (infoView) и особенно альфа вызывающего представления (introView), поэтому сейчас я делаю это с помощью insertSubview.
Мой кодсейчас: introVC .h
- (IBAction) openInf:(id)sender;
IBOutlet InfoVC *infoScreenVC;
introVC .m
- (IBAction) openInf:(id)sender {
[infoScreenVC openInfoMethod];}
infoVC .h
- (IBAction) closeInfoPressed;
- (void) openInfoMethod;
- (void) closeInfoMethod;
infoVC .m
- (IBAction) closeInfoPressed {
[self closeInfoPressed];}
- (void) closeInfoMethod {
[self.view removeFromSuperview];
[self.xx.view setAlpha:1.0f];}
- (void) openInfoMethod {
self.view.backgroundColor = [UIColor clearColor];
[self.xx.view setAlpha:0.2f];
[((MyAppAppDelegate *)[UIApplication sharedApplication].delegate).window
insertSubview: self.infoScreenVC.view aboveSubview: self.xx.view];}
Когда я нажимаю кнопку, чтобы показать infoView, мои NSLogs сообщают мне, что метод был вызван, но я вижу, что Subview не было добавлено.Я понятия не имею, что вставлять, где прямо сейчас в моем коде написано «хх», так как ссылка на VC из вступления не показывает мне экран.Если я помещаю этот код в introVC и изменяю его, он показывает infoView, вызывает правильный метод для закрытия, но снова не может закрыться (когда я в introVC).Я не могу понять, как сказать моему приложению, кто звонил венчурному инвестору, чтобы вернуться туда.В какой-то момент, когда весь код был в introVC, мне удалось даже удалить Subview, но я не смог установить Alpha для introVC обратно на единицу.
Я борюсь с этим уже два дня ... -.- Или, может быть, есть даже более простое решение?
Большое спасибо!
// Редактировать после ответа sergios: intro.m
- (IBAction) openInf:(id)sender {
introViewController *introVC;
[infoScreenVC openInfoMethod:];}
info.h
- (void) openInfoMethod:(introViewController *introVC);
info.m
- (void) openInfoMethod:(introViewController *introVC) { //error occurs here
self.view.backgroundColor = [UIColor clearColor];
[self.introVC.view setAlpha:0.2f];
[((MyAppAppDelegate *)[UIApplication sharedApplication].delegate).window
insertSubview: self.infoScreenVC.view aboveSubview: self.introVC.view];}
и возникающая ошибка говорит
Expected ')' before 'introVC'
Я не уверен, как правильно передать ссылку на VC.Спасибо за вашу помощь !!
// РЕДАКТИРОВАТЬ Рабочий код:
Как это работает сейчас, я хотел бы подвести итог: - Я даю вызывающему VC (introVC) openInfoMethod в действии openInf, как [infoVC openInfoMethod:introVC]
.
В openInfoMethod я «сохраняю» вызывающий VC в локальной переменной типа introVC (?) И добавляю оверлей и т. Д.
Когдапроисходит действие infoViewController с именем closeInfoPressed, он вызывает метод infoViewController closeInfoMethod наподобие self closeInfoMethod:introVC
.
В этом методе я удаляю self.view из Superview и устанавливаю альфа introVC.view в 1, как introVC.view setAlpha: 1.0f
Так что кодыintro.h
IBOutlet InfoscreenViewController *infoScreenVC;
@property (nonatomic, retain) IBOutlet InfoscreenViewController *infoScreenVC;
- (IBAction) openInf:(id)sender;
intro.m
@synthesize infoScreenVC;
- (IBAction) openInf:(id)sender {
UIViewController *introVC = self;
[infoScreenVC openInfoMethod:introVC];
}
info.h:
- (void) openInfoMethod:(UIViewController *)rootVC;
- (void) closeInfoMethod:(UIViewController *)callingVC;
info.m
- (void) closeInfoMethod:(UIViewController *)callingVC;{
[self.view removeFromSuperview];
[callingVC.view setAlpha:1.0f];
}
- (IBAction) closeInfoPressed{
[self closeInfoMethod:introVC];
[self.view removeFromSuperview];
}