2009-05-27 12 views
11

私はそれほど複雑ではないはずのことをしようとしていますが、わかりません。 私はUITableViewを表示するUIViewControllerを持っています。ユーザーが行を押したときにコンテキストメニューを表示したい。これは、ラベルやボタン付きの半透明なビューにしたいと思っています。 私はAlertViewを使うことができましたが、ラベルとボタンのフォーマットを完全にコントロールしたいので、Interface Builderを使いたいと思います。iPhoneモーダルビュー画面を小さくする

私は250x290の小さなビューを作成し、アルファベットを.75に設定し、アウトレットで異なるユーザーイベントを処理するビューコントローラを作成しました。

今、私はそれを提示したいと思います。 presentModalViewControllerを使用すると、2つの(望ましくない)ことが起こる 1)ビューはすべての画面(ステータスバー)をカバーします。 2)半透明ですが、親ビューではなくアプリケーションのルートビューの「背後に」表示されます。イムは、右の何かをやっていないので、

、アイブ氏は、サブビューとして追加しようとしたが、何も起こりません:

RestaurantContextVC* modalViewController = [[[RestaurantContextVC alloc] initWithNibName:@"RestaurantContextView" bundle:nil] autorelease]; 
[self.view addSubview:modalViewController.view]; 

は私がやりたいことは可能ですか? ありがとうございます。

Gonso私は強く、それを重ねるのではなく、あなたのサブビューにスライドナビゲーションコントローラを使用して検討する

+0

こんにちはGonso:

MyViewController * myVC = [[UIViewController alloc] init]; //... set up viewcontroller and its view... // add the view of the created view controller to the popup view: [AppState sharedInstance].popupViewController.view.hidden = false; [[AppState sharedInstance].popupViewController.view addSubview:myVC.view]; 

BaseViewControllerはただのUIViewControllerから継承し、フルスクリーンビューを設定上で使用しました!私は同じことをしようとしている。あなたの最終的な解決策では、あなたはポップアップモーダルビューを小さくしたのですか? (あなたのポストは、まだ親のインタラクティブな問題を示唆しています)。モーダルビューを小さく保ちながら、親画面とのタッチ操作を無効にする方法を見つけましたか(部分的な透明度の他に、モーダルサブビューの端に親情報が表示されます)。丸い矩形は私のために働くが、私はモーダルビューに触れ、予期せぬ応答を得ることについてユーザーが心配している。唯一可能なリターンをモーダルビューのボタンにしたい。 – Cindeselia

答えて

11

私は同様のことをコーディングしています。私のアプローチは.....

  1. dismissModalViewControllerAnimatedとpresentModalViewController:animatedを使用しています。

  2. カスタマイズされたフルサイズのビューをIBでデザインします。 viewDidLoadメッセージ本文では、背景色をclearColorに設定して、コントローラでカバーされていないビュー上の領域が透明になるようにします。

  3. フローティングビューのコントローラの下にUIImageViewを配置しました。 UIImageViewには、丸められた角があり、背景が透明に設定された、Photoshopのイメージが含まれています。この画像ビューはコンテナとして機能します。

  4. 私はCoreAnimationを使用してフローティングビューをモーダルビュースタイルで表示/非表示します。(FloatingViewController。メートル)

    - (void)viewDidLoad 
    { 
        [super viewDidLoad]; 
        [self.view setBackgroundColor:[UIColor clearColor]]; 
    
        [UIView beginAnimations:nil context:nil]; 
        [self.view setFrame:CGRectMake(0, 480, 320, 480)]; 
    
        [UIView setAnimationDuration:0.75f]; 
        [self.view setFrame:CGRectMake(0, 0, 320, 480)]; 
        [UIView commitAnimations]; 
    } 
    
+0

クリアする色を設定すると背景が黒く見える –

2

。これは予想されるモデルであり、あなたが自分のやり方をすることによって得られると思われる小さな利益は、(少なくとも)驚きの原則によって大きく相殺されます。

本当にこのようにしなければならないのは、最初のテーブルビューをビューコントローラが保持する透過的な「保持」ビューのサブビューとして追加することだと思います。次に、新しいサブビューをそのサブビューとして追加します。

+0

ナビゲーションコントローラを使用して親ビューに小さなビューを追加できますか?私はそれを小さなビューとしてコントロールして完全なビューをデザインし、背景を透明に設定すると思いますか? –

+0

私は同じ質問をしています:小さなビューオーバーレイは可能ですか?私はスライドを使って画面全体をカバーしたくはありませんが、それは私を悩ませる「滑り」ではありませんが、完全なカバレッジです。私は、サブビューを生み出したもの以外のオプションを知っていることから利益を得るので、親を部分的に見えるようにしたい。バックグラウンドを透明に設定したいが、モーダルビューがアップしている間はバックスクリーンとのやりとりを有効にしない。モーダルビューには、キャンセルボタン、詳細スワイブルUIImageView(画像間の切り替え)、および確定ボタンがあります。ありがとうございました! – Cindeselia

1

透明な「保持」ビューを追加するのではなく、このポップアップは本質的にモーダルなので、これを実際に実行したい場合は、ウィンドウの直接のサブビューにします。

バックグラウンドでのタッチやポップアップへのフォーカスの入力を防ぐため、透明な黒いシールドを背面に配置したい場合があります。

しかし、真剣に、スタック上のコントローラをポップするか、そのアラートビューを使用することを検討してください。あなたが$$デザイナーを雇っていない限り、おそらくiPhone上では適切に見えません。

3

wangii

ザッツほとんど私が見つけた解決策。 私はloadNibNamedとビューをロードして、ちょうどこのように、addSubViewでトップにそれを追加します。

//Show a view on top of current view with a wait indicator. This prevents all user interactions. 
-(void) showWaitView{ 
    NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"WaitView" owner:self options:nil]; 
#ifdef __IPHONE_2_1 
    waitView = [ nibViews objectAtIndex: 0]; 
#else 
    waitView = [ nibViews objectAtIndex: 1]; 
#endif   
    CGFloat x = self.view.center.x - (waitView.frame.size.width/2); 
    CGFloat y = self.view.center.y - (waitView.frame.size.height/2); 
    [waitView setFrame:CGRectMake(x,y,waitView.bounds.size.width,waitView.bounds.size.height)]; 
    [self.view addSubview:waitView];  
} 

あなたはポイント3および4に手の込んだてもらえますか?

私は、丸い四角のアスペクトを円形の四角形のボタンの中に置いて表示するようにしました。

このコードでは、実際に小さなフローティングビューを使用できますが、ビューがその親よりも小さい場合、ユーザーは親の表示可能な部分と対話できます。

私は同じサイズのビューを作成しますが、コードをそのまま使用しています。

Gonso私が何をしたか

+0

waitViewはUIViewかViewControllerですか?あなたのコードを試してみましたが、waitViewにはフレームがありません。私はペンも用意されていますが、ペン先の画面をUIViewにすることはできません。UIViewControllerだけです! – Cindeselia

1

は私のアプリデリゲートに私のUINavigationコントローラの上のUIViewControllerを作成し、その利便性のためにシングルトンオブジェクトのプロパティ作られた:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

//--- create root navigation controller 
self.window.rootViewController = self.navigationController; 

//--- create view controller for popups: 
popupViewController = [[BaseViewController alloc] init]; 
popupViewController.view.backgroundColor = [UIColor clearColor]; 
popupViewController.view.hidden = true; //for rendering optimisation 
[self.window addSubview:popupViewController.view]; 
[AppState sharedInstance].popupViewController = self.popupViewController; 

//--- make all visible: 
[self.window makeKeyAndVisible]; 

return YES; 

}

私のアプリケーションの任意の時点で、私は次に呼び出すことができます

//----- in BaseViewController implementation 
- (void)loadView { 
    //------- create root view: 
    CGRect frame = [[AppState sharedInstance] getScreenFrame]; 
    rootView = [[VCView alloc] initWithFrame:frame]; 
    rootView.backgroundColor = [UIColor whiteColor]; 
    self.view = rootView; 
} 
関連する問題