0

この 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 は、全画面モード以外のすべてで機能します。ViewDidLoad で modalview の self.view をログに記録しましたが、適切なディメンションがあります (ステータスバーの調整を含む)

NSLog (modalviewcontroller.view) => < UIView: 0x7d173a0; フレーム = (20 0; 748 1024); 自動サイズ変更 = W+H; 層 = >

NSLog (modalviewcontroller.SomeView => < UIView: 0x7d154a0; フレーム = (0 0; 1024 660); レイヤー = >

私はここで(明らかに)何か間違ったことをしていますが、それが何であるかを理解できないようです。私は回避策として何かを探してきましたが、これまでのところどのオプションも答えにはなっていません。誰かがここで何が問題なのか手がかりを持っているなら、私は非常に知りたい.

前もって感謝します。

//---編集---//

さて、このプロトタイプを作成し、このコードが意図したとおりに機能することを確認しました。しかし、私のより大きなアーキテクチャではまったく同じことを実装することはできないようです。

--------.h (メインVC)

#import <UIKit/UIKit.h>
#import "ModalFullScreenShizzle.h"

@interface ModalViewControllerFullScreenTry2ViewController : UIViewController    <ModalViewDelegate>
{
    ModalFullScreenShizzle *fullscreenShizzle;
}

@property (nonatomic,retain) ModalFullScreenShizzle *fullscreenShizzle;

-(void)gotoFullscreenModal;

@end

-----------.m (メインVC)

@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 (モーダルVC)

#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 (モーダルVC)

#import "ModalFullScreenShizzle.h"

@implementation ModalFullScreenShizzle

@synthesize theScreen;

- (void)loadView
{
    [super loadView];
    self.view.frame = theScreen.frame;
    self.view.backgroundColor = [UIColor blueColor];
}

//---編集 2 ---//

上記のコードを実行し、メインの mainVC ウィンドウに追加しようとしました。動作しますが、自動サイズ変更に準拠していません。それでも、自動サイズ変更が適切に機能したとしても、これは(ちょっと)汚い修正であり、私が使用したい適切な解決策ではありません。また、ウィンドウが表示される順序でもありません。それまでの間、私は他の (機能している) プレゼンテーション スタイルの 1 つを使用しています。しかし、私はまだ解決策を知りたい..

..誰かがそれを知っていれば。

4

1 に答える 1

0

たぶん問題は:

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

MyViewControllerのviewDidLoadまたはloadView内でこれを実行してみてください。

-

編集

編集コードを見た後でも、ビューがまだロードされていないときにフレームを設定していることが問題だと思います。

于 2011-09-30T07:43:17.287 に答える