Reputation: 337
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
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
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