ようやく合法的 (おそらく) に iPhone でポップオーバーを出すことができるようになったようです。

iBooks for iPhone でもポップオーバーが使われているので、当然といえば当然ですが。

ただし、iOS 8 以下のデバイスでは動作しません。

HogeViewController は、ポップオーバー上に表示したい View を持つ UIViewContoroller のサブクラスです。

- (IBAction)buttonDidPush:(id)sender
{
    HogeViewController *hogeViewController = [[HogeViewController alloc] init];
    [self presentPopOverWithViewController:hogeViewController sourceView:_button];
}

UIPopoverController ではなく、UIPopoverPresentationController を使ってポップオーバーを表示します。

- (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 の場合はモーダルビューが表示されます。iPhone でもポップオーバーを表示するためには、下記の delegate メソッドで常に UIModalPresentationNone を返すようにします。

- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller
{
    return UIModalPresentationNone;
}

参考

Videos for Enterprise App Developers - Apple Developer (要 iOS Developer Program アカウント) https://developer.apple.com/videos/enterprise/