Проблемы с UIPopOverScreen

#iphone #objective-c #ipad #uipopovercontroller

#iPhone #objective-c #iPad #uipopovercontroller

Вопрос:

Недавно я заинтересовался созданием всплывающего экрана. В моей панели навигации я создал эту кнопку, и когда я нажимаю на нее, должен появиться всплывающий экран. Итак, я начал искать полезный учебник, и все же я нашел в основном учебные пособия, сделанные с помощью Interface builder, а это не то, что я хочу. Поэтому я начал экспериментировать самостоятельно.

Это мой результат:

Сначала я установил необходимые свойства в mainVC.h Также обратите внимание на

 #import <UIKit/UIKit.h>
#import "ThePopOverVC.h"

@interface PopoverPrototypeViewController : UIViewController <UIPopoverControllerDelegate>
{
    ThePopOverVC *popover;
    UIPopoverController *popoverController;
    UIButton *popoverButton;
}

@property (nonatomic,retain) ThePopOverVC *popover;
@property (nonatomic,retain) UIPopoverController *popoverController;
@property (nonatomic,retain) UIButton *popoverButton;

- (void)popoverActivation;

@end
  

Затем я настраиваю свой просмотр в mainVC.m
Он подготавливает представление для всплывающего экрана при нажатии кнопки.

 #import "PopoverPrototypeViewController.h"

@implementation PopoverPrototypeViewController

@synthesize popover;
@synthesize popoverController;
@synthesize popoverButton;

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)loadView
{
    [super loadView];

    self.view.backgroundColor = [UIColor blueColor];

    popover = [[ThePopOverVC alloc] init];
    popoverController = [[UIPopoverController alloc] initWithContentViewController:popover];
    popoverController.popoverContentSize = CGSizeMake(300, 300);
    popoverController.delegate = self;

    self.popoverButton = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 400, 100)];
    self.popoverButton.backgroundColor = [UIColor lightGrayColor];
    [self.popoverButton setTitle:@"Click me!" forState:UIControlStateNormal];
    [self.popoverButton addTarget:self action:@selector(popoverActivation) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:self.popoverButton];


}

- (void)popoverActivation
{
    if ([self.popoverController isPopoverVisible]) {

        [self.popoverController dismissPopoverAnimated:YES];

    } else {

        UIBarButtonItem *settingsBarButton = [[UIBarButtonItem alloc] initWithCustomView:self.popoverButton];
        [self.popoverController presentPopoverFromBarButtonItem:settingsBarButton permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

    }
}

- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
{
    return YES;
}

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
    NSLog(@"something");
}
  

Хорошо, mainVC должен быть настроен, теперь пришло время показать popoverContentViewController.
Для моего эксперимента я просто хочу, чтобы это был пустой вид с другим фоновым цветом.

Итак, popoverVC.h пуст:

 #import <UIKit/UIKit.h>

@interface ThePopOverVC : UIViewController

@end
  

Мой файл popoverVC.m одинаково пуст, за исключением изменения цвета фона:

 #import "ThePopOverVC.h"

@implementation ThePopOverVC

- (void)loadView
{
    [super loadView];
    self.view.backgroundColor = [UIColor yellowColor];
}
  

Вы бы сказали, что это не должно быть слишком сложно. Но все же у меня возникают проблемы с загрузкой проекта.
Я получаю следующее предупреждение: предупреждение: невозможно восстановить ранее выбранный кадр.

Ну, вот и возникает вопрос: что я упустил из виду? Что я сделал не так и как я могу заставить этот простой прототип работать?

//— РЕДАКТИРОВАТЬ — // Хорошо, я чертов идиот, что пропустил это.

 [super loadView];
  

Super loadView не был вызван и вызвал у меня эту простую проблему.
Я отредактировал код, чтобы он теперь работал правильно.
Используйте это как учебное пособие по созданию UIPopOverScreens, если хотите (или что угодно).
Ссылка: http://www.raywenderlich.com/1056/ipad-for-iphone-developers-101-uipopovercontroller-tutorial

Комментарии:

1. Вы можете обратиться к блогам Рэя Вендерлиха UIPopoverViewController . raywenderlich.com/1056 /…

Ответ №1:

 [super loadView];
  

Отсутствовал в popovervc.m
Довольно глупо упускать из виду .. но да, теперь это работает.