presentModalViewController проблема полноэкранного режима - PullRequest
0 голосов
/ 30 сентября 2011

Я пытаюсь представить этот 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

-----------. M (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

--------------. М (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 Ответ

0 голосов
/ 30 сентября 2011

Возможно, проблема в следующем:

 self.myViewController.SomeView = [[UIView alloc] init];
 self.myViewController.SomeView.frame = self.ThisView.frame;

Попробуйте сделать это внутри viewDidLoad или loadView MyViewController.

-

EDIT

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

...