1

サイドバーメニューを作成しようとしていますが、少し問題があります。

私が説明します :

  1. sideMenuViewControllerと呼ばれるUIViewControllerを作成しました
  2. 私のviewControllerクラス(最初のビューコントローラー)のヘッダーファイルで、クラスSideMenuViewControllerをインポートし、次のように記述しました。

    -(IBAction)openSideMenu:(id)sender;

    @property(nonatomic, retain) SideMenuViewController *sideMenu;
    

openSideMenuアクションは、メニューボタンに関連付けられています。メニューボタン

私はこのメソッドを次のように実装しました:

- (IBAction)openSideMenu:(id)sender {
    CGRect destination = self.view.frame;

    if(destination.origin.x > 0){
        destination.origin.x = 0;
    }else{
        destination.origin.x += SideMenuX;
    }

    [UIView animateWithDuration:0.4 animations:^{
        self.view.frame = destination;
    }completion:^(BOOL finished) {
        if(finished){

        }
    }];
}

SideMenuXはマクロです:#define SideMenuX 154.4

私のviewDidLoadメソッドは次のようになります:

- (void)viewDidLoad
{
    [super viewDidLoad];
    _sideMenu = [[SideMenuViewController alloc] init];
    [self.view sendSubviewToBack:_sideMenu.view];
    // Do any additional setup after loading the view, typically from a nib.
}

問題は、メニューボタンをクリックすると、サイドメニュービューではなく黒い画面が表示されることです。

ブラックスクリーンサイドバーメニュー

前もって感謝します !

4

2 に答える 2

2

2つの問題:

  1. sideMenuをまったく追加していません。親ビュー(self.view.superview)に追加してみてください。この場合、UIWindowになります。
    [self.view.superview insertSubview:_sideMenu.viewbelowSubview:self.view];
    ナビゲーションコントローラーを使用している場合は、self.navigationController.view代わりにを使用してself.viewください。
  2. ビューをNIBとストーリーボードのどちらで初期化したかわからない(そうでない場合は以下を参照)。

これが実際の例です。ストーリーボード内に次のように左側のビューコントローラーを作成しました。

  • ストーリーボードにViewControllerコンポーネントをスローします。
  • 左側の列でコントローラーを選択し、右側の列でIdentity Inspectorに移動します(alt + cmd + 3)。
    • クラスをに設定しますSideMenuViewController
    • ストーリーボードIDをに設定しますSideMenuViewController

viewDidLoad内のコントローラーをインスタンス化します

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
self.sideMenu = (SideMenuViewController*)[storyboard instantiateViewControllerWithIdentifier:@"SideMenuViewController"];

次に、それをスーパービューの子として挿入します。


(以下のコメントに答える)

この行が問題です:

[self.view.superview addSubview:_sideMenu.view];

NIBベースのプロジェクトでは、スーパービューはUIWindowですが、ストーリーボードプロジェクトでは、UIViewControllerのself.view.superviewはnilです。これは、たとえばUINavigationViewControllerを追加することで解決できます。次の手順を実行します:

  • 「ナビゲーションコントローラー」を投入する
  • 指しているViewControllerを削除します。
  • Ctrlキーを押しながら、ポインターをUINavigationControllerからビューコントローラーにドラッグし、表示されるダイアログで[ルートビューコントローラー]を選択します。
  • ビューコントローラを指す矢印をUINavigationController(UINavigationControllerからのものではなく、最初のView Controllerをマークするもの)にドラッグします。

次に、コードを次のように変更します

_sideMenu = [[SideMenuViewController alloc] initWithNibName:@"SideMenuViewController" bundle:nil];
[self.navigationController.view.superview insertSubview:_sideMenu.view belowSubview:self.navigationController.view];

UINavigationControllerのナビゲーションバーを非表示にするには、ストーリーボードでナビゲーションバーを選択し、属性インスペクター(alt + cmd + 4)で[非表示]をクリックします。

于 2012-10-30T10:05:08.097 に答える
0

サイドメニュービューが追加されていないため、表示されているのは黒だけです。これを試して:

- (void)viewDidLoad {
      [super viewDidLoad];
      _sideMenu = [[SideMenuViewController alloc] init];
      [self.view addSubview:_sideMenu.view];
      [self.view sendSubviewToBack:_sideMenu.view];
}
于 2012-10-30T09:53:41.807 に答える