Search code examples
iphonemodal-dialogmodalviewcontroller

iPhone Modal View Smaller that the screen


I'm trying to do something that shouldn't be that complicated, but I can't figure it out. I have a UIViewController displaying a UITableView. I want to present a context menu when the user press on a row. I want this to be a semi-transparent view with labels and buttons. I could use an AlertView, but I want full control on the format of the labels and buttons and will like to use Interface Builder.

So I created my small view 250x290, set the alpha to .75 and create a view controller with the outlets to handle the different user events.

Now I want to present it. If I use presentModalViewController two (undesired) things happen 1) the view covers all of the screen (but the status bar). 2) It is semi-transparent, but what I see "behind" it its not the parent view but the applications root view.

Ive tried adding it as a subview, but nothing happens, so Im not doing something right:

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

Is it possible to do what I want? Thanks in advance.

Gonso


Solution

  • I'm coding similar thing. My approach include.....

    1. Not using dismissModalViewControllerAnimated and presentModalViewController:animated.

    2. Design a customized full sized view in IB. In its viewDidLoad message body, set the background color to clearColor, so that space on the view not covered by controllers are transparent.

    3. I put a UIImageView under the controllers of the floating view. The UIImageView contains a photoshoped image, which has rounded corners and the background is set to transparent. This image view serves as the container.

    4. I uses CoreAnimation to present/dismiss the floating view in the modal view style: (the FloatingViewController.m)

      -  (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];
      }