UIPopOverScreen 的麻烦
最近我对制作弹出屏幕感兴趣。在我的导航栏中,我制作了这个按钮,当我单击它时,它应该会出现一个弹出屏幕。 所以我开始寻找有用的教程,但我发现大部分教程都是用界面生成器制作的,这不是我想要的。于是我开始自己尝试。
这是我的结果:
首先,我在 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];
超级 loadView 没有被调用,给了我这个简单的问题。 我编辑了代码,现在它可以正常工作了。 如果您愿意(或其他),可以将其用作有关如何制作 UIPopOverScreens 的教程。 参考: http://www.raywenderlich.com/1056 /ipad-for-iphone-developers-101-uipopovercontroller-tutorial
Recently I have taken interest in making a popover screen. In my Navigation bar I made this button and when I click on it it should make a popover screen appear.
So I started searching for a usefull tutorial and yet I found mostly tutorials made with interface builder, which is not what I want. So I started experimenting on my own.
This is my result:
First I set the necessary properties in the MainVC.h
Also mind the
#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
Then I set up my view in the MainVC.m
It prepares the view for the popoverscreen when pressing a button.
#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");
}
Ok, the MainVC should be setup, now it's time to show the popoverContentViewController.
For my experiment I just want it to be an empty view with just a different backgroundColor.
So the popoverVC.h is empty:
#import <UIKit/UIKit.h>
@interface ThePopOverVC : UIViewController
@end
My popoverVC.m is equally empty except for the backgroundColor change:
#import "ThePopOverVC.h"
@implementation ThePopOverVC
- (void)loadView
{
[super loadView];
self.view.backgroundColor = [UIColor yellowColor];
}
You would say this shouldn't be too hard. But yet I'm experiencing problems loading the project.
I'm getting the following warning: warning: Unable to restore previously selected frame.
Well here comes the question:
What have I overlooked? What have I done wrong and how can I make this simple prototype work?
//---EDIT---//
OK, I'm a bloody idiot for overlooking this one.
[super loadView];
The super loadView wasn't called and gave me this simple problem.
I edited the code so it works properly now.
Use this as a tutorial on how to make UIPopOverScreens if you will (or whatever).
Ref: http://www.raywenderlich.com/1056/ipad-for-iphone-developers-101-uipopovercontroller-tutorial
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
ThePopOverVC.m 中缺失
忽视它很愚蠢……但是,是的,它现在起作用了。
Was missing from ThePopOverVC.m
Pretty silly to overlook.. but yeah, it works now.