Недавно я заинтересовался созданием всплывающего экрана.В моей панели навигации я сделал эту кнопку, и когда я нажимаю на нее, должен появиться всплывающий экран.Поэтому я начал поиск полезного учебника, и все же я нашел в основном учебники, созданные с помощью конструктора интерфейсов, а это не то, что мне нужно.Итак, я начал экспериментировать самостоятельно.
Это мой результат:
Сначала я установил необходимые свойства в 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.Для моего эксперимента я просто хочу, чтобы это было пустое представление с другим backgroundColor.
Так что 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];
}
Вы бы сказали, что это не должно быть слишком сложно.Но все же у меня возникают проблемы с загрузкой проекта.Я получаю следующее предупреждение: предупреждение: Невозможно восстановить ранее выбранный кадр.
Что ж, возникает вопрос: что я упустил?Что я сделал не так и как я могу заставить этот простой прототип работать?
// --- EDIT --- // Хорошо, я чертовски идиот за то, что пропустил этот.
[super loadView];
Super loadView не был вызван и дал мне эту простую проблему.Я отредактировал код, чтобы он теперь работал правильно.Используйте это как учебник о том, как сделать UIPopOverScreens, если хотите (или что-то еще).Ссылка: http://www.raywenderlich.com/1056/ipad-for-iphone-developers-101-uipopovercontroller-tutorial