presentModalViewController проблема полноэкранного режима
Я пытаюсь представить этот modalViewController в моем приложении, и он должен быть полноэкранным.
Вот как я вызываю ModalViewController.
myViewController = [[MyViewController alloc] init];
//self.myViewController.SomeView = [[UIView alloc] init];
//self.myViewController.SomeView.frame = self.ThisView.frame;
//self.myViewController.backButtonEnabled = NO;
//self.myViewController.dismissDelegate = self;
//[self.myViewController doLoadShizzle]; //do this to load view and stuffs as well
//all commented to try to make the edit construction work
UINavigationController *navController = [[UINavigationController alloc]
initWithRootViewController:self.myViewController];
navController.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentModalViewController:navController animated:YES];
[self.myViewController release];
[navController release];
NavController.modalPresentationStyle работает для всего, кроме полноэкранного режима. Я зарегистрировал self.view модального вида в ViewDidLoad, и он имеет правильные размеры (включая настройки в строке состояния)
NSLog (modalviewcontroller.view) =>
NSLog (modalviewcontroller.SomeView =>
Я делаю что-то не так (очевидно), но я не могу понять, что это такое. Я искал вещи как обходной путь, но ни один из вариантов не был ответом до сих пор. Если у кого-то есть подсказка, в чем здесь проблема, я бы очень хотел узнать.
Заранее спасибо.
// ---РЕДАКТИРОВАТЬ---//
Хорошо, теперь я создаю этот прототип и подтвердил, что этот код работает так, как я хочу. Тем не менее, я не могу реализовать то же самое в моей большей архитектуре.
--------. h (mainVC)
#import <UIKit/UIKit.h>
#import "ModalFullScreenShizzle.h"
@interface ModalViewControllerFullScreenTry2ViewController : UIViewController <ModalViewDelegate>
{
ModalFullScreenShizzle *fullscreenShizzle;
}
@property (nonatomic,retain) ModalFullScreenShizzle *fullscreenShizzle;
-(void)gotoFullscreenModal;
@end
-----------. м (mainVC)
@implementation ModalViewControllerFullScreenTry2ViewController
@synthesize fullscreenShizzle;
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor yellowColor];
UIButton *fullscreenActivate = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
fullscreenActivate.backgroundColor = [UIColor greenColor];
[fullscreenActivate addTarget:self action:@selector(gotoFullscreenModal) forControlEvents:UIControlEventTouchUpInside];
[fullscreenActivate setTitle:@"Full Screen ACTIVATE!!!!!!1111one" forState:UIControlStateNormal];
[self.view addSubview:fullscreenActivate];
}
-(void)gotoFullscreenModal
{
self.fullscreenShizzle = [[ModalFullScreenShizzle alloc] init];
self.fullscreenShizzle.theScreen.frame = self.view.frame;
// self.fullscreenShizzle.dismissDelegate = self;
UINavigationController *navController = [[UINavigationController alloc]
initWithRootViewController:self.fullscreenShizzle];
navController.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentModalViewController:navController animated:YES];
// [self.fullscreenShizzle release];
// [navController release];
}
-(void)didDismissModalView
{
[self dismissModalViewControllerAnimated:YES];
}
-----------. h (modalVC)
#import <UIKit/UIKit.h>
@protocol ModalViewDelegate <NSObject>
- (void)didDismissModalView;
@end
@interface ModalFullScreenShizzle : UIViewController
{
UIView *theScreen;
id<ModalViewDelegate> dismissDelegate;
}
@property (nonatomic, retain) UIView *theScreen;
@property (nonatomic, assign) id<ModalViewDelegate> dismissDelegate;
@end
--------------. m (modalVC)
#import "ModalFullScreenShizzle.h"
@implementation ModalFullScreenShizzle
@synthesize theScreen;
- (void)loadView
{
[super loadView];
self.view.frame = theScreen.frame;
self.view.backgroundColor = [UIColor blueColor];
}
// ---РЕДАКТИРОВАТЬ 2---//
Я сделал код выше и попытался добавить его в главное окно mainVC. Это работает, но не соответствует автоматическому изменению размера. Но даже если авторазмер работает правильно, это (вроде) грязное исправление, а не правильное решение, которое я хотел бы использовать. И это не тот порядок, в котором окна показывают себя. Тем временем я использую один из других (работающих) стилей представления. Но я все еще хотел бы знать решение..
... если кто-нибудь знает, что это.
1 ответ
Может быть проблема в следующем:
self.myViewController.SomeView = [[UIView alloc] init];
self.myViewController.SomeView.frame = self.ThisView.frame;
Попробуйте сделать это внутри viewDidLoad или loadView MyViewController.
-
РЕДАКТИРОВАТЬ
После просмотра вашего кода редактирования я все еще думаю, что проблема в том, что вы устанавливаете кадр, когда представление еще не загружено.