📝

UIPopoverPresentationControllerの実装のやり方(Objective-C)

2020/09/29に公開

こういう人に向けて発信しています。

・UIPopoverPresentationController(Objective-C)の実装をしたい人
・UIPopOverCotnroolerを使いたく無い人
・Objective-C初心者

UIPopoverPresentationControllerとは何か

UIPopoverPresentationControllerはiOS8.0以降から実装されました。
しかし、ネット上にはSwiftばかりで全然Objective-Cの情報がない!

という事で今回Objective-Cで簡単な実装を手順まとめました。

クラス構成について

・ViewController.h
・ViewController.m
・popOverViewController
・popOverViewController.m
上記クラスのみでxibなど使わず、コードでボタンなど初期化しております。

下記に各クラスのコードを貼っておくので
書き換えて再現してみてください。

ViewController.h


#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end

ViewController.m


#import "ViewController.h"
#import "popOverViewController.h"


//デリゲートの採用はしておく。
@interface ViewController ()<UIPopoverPresentationControllerDelegate>

@end

@implementation ViewController{
    UIButton *nextVCBtn;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [self initButton];
    // Do any additional setup after loading the view, typically from a nib.
}

-(void)initButton{
    nextVCBtn = [[UIButton alloc]initWithFrame:CGRectMake(0, self.view.bounds.size.height/2 + 50.0f, self.view.bounds.size.width, 10.0f)];
    [nextVCBtn setTitle:@"次のVCに遷移。(UIButton)" forState:UIControlStateNormal];
    [nextVCBtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
    // ボタンがタッチダウンされた時にnextViewメソッドを呼び出す
    [nextVCBtn addTarget:self action:@selector(nextView:)
        forControlEvents:UIControlEventTouchDown];
    
    [self.view addSubview:nextVCBtn];
}

- (IBAction)nextView:(id)sender {
    //表示したいViewControllerを初期化する。
    popOverViewController *popOverVC = [[popOverViewController alloc] init];
    [self presentPopOverWithViewController:popOverVC sourceView:nextVCBtn];
    
}

- (void)presentPopOverWithViewController:(UIViewController *)viewController sourceView:(UIView *)sourceView
{
    viewController.modalPresentationStyle = UIModalPresentationPopover;
    viewController.preferredContentSize = CGSizeMake(100.0, 100.0);
    
    UIPopoverPresentationController *presentationController = viewController.popoverPresentationController;
    presentationController.delegate = self;
    presentationController.permittedArrowDirections = UIPopoverArrowDirectionUp;
    presentationController.sourceView = sourceView;
    presentationController.sourceRect = sourceView.bounds;
    
    [self presentViewController:viewController animated:YES completion:NULL];
}

//iPhoneでの描画に大きく関係するのでしっかり追加しておく
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller
{
    return UIModalPresentationNone;
}

@end

popOverViewController.h


#import <UIKit/UIKit.h>
@interface popOverViewController : UIViewController

@end

popOverViewController.m


#import "popOverViewController.h"

@interface popOverViewController ()

@end

@implementation popOverViewController{
    UIView *secondView;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    secondView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100.0f, 0.0f)];
    secondView.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:secondView];
    
}


@end

本記事含め他の記事は「長時間1人で悩んで不安やストレスフルな方を解決したい」という一心で更新しております。少額でも構いませんのでサポートしていただけますと記事更新のモチベーションになりますので、御援助いただけますと助かります。

Discussion