user2813740
user2813740

Reputation: 337

presentViewController(UIViewController) not working

I wanted to populate my uncontrolled view as presentViewController on my app, but it does not work. I do not want to cover the entire screen. Like on the iPad, it should view at the centre and frame, which is preferred.

Below is my code which covers the entire screen:

MyView *testview = [[MyView alloc]init];
testview.modalPresentationStyle = UIModalPresentationFormSheet;
testview.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentViewController: testview animated:YES completion:nil];

I do not want to push my UIViewController...

Upvotes: 0

Views: 1550

Answers (2)

ronb
ronb

Reputation: 261

Here's what worked for me (iOS 9 or later):

MyViewController *testVC = [[MyViewController alloc] init];
testVC.modalPresentationStyle = UIModalPresentationFormSheet;
testVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

// Both of these are necessary to make it present as a form sheet on an iPhone/iPod.
testVC.presentationController.delegate = vc;
testVC.presentationController.overrideTraitCollection = [UITraitCollection traitCollectionWithTraitsFromCollections:@[[UITraitCollection traitCollectionWithUserInterfaceIdiom:UIUserInterfaceIdiomPad]]];

// Set the size if you don't set it elsewhere.
testVC.preferredContentSize = CGSizeMake(270, 130);

[self presentViewController:vc animated:YES completion:nil];

Also, the view controller you are presenting needs implement the UIAdaptivePresentationControllerDelegate protocol:

@interface MyViewController () <UIAdaptivePresentationControllerDelegate>
...
@end

@implementation MyViewController
...
(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller traitCollection:(UITraitCollection *)traitCollection {
    // This makes it use the presentation style that was set when it was presented.
    return UIModalPresentationNone;
}
...
@end

Upvotes: 0

ingconti
ingconti

Reputation: 11666

You cannot present a View. You must present a controller. for example:

 UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
    MyViewController* vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"MY_CTL_ID"];
    [self  presentViewController:vc animated:NO completion:nil];

Upvotes: 1

Related Questions