UIPopOverScreen 的麻烦

发布于 2024-12-09 13:30:45 字数 3451 浏览 4 评论 0原文

最近我对制作弹出屏幕感兴趣。在我的导航栏中,我制作了这个按钮,当我单击它时,它应该会出现一个弹出屏幕。 所以我开始寻找有用的教程,但我发现大部分教程都是用界面生成器制作的,这不是我想要的。于是我开始自己尝试。

这是我的结果:

首先,我在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

_蜘蛛 2024-12-16 13:30:45
[super loadView];

ThePopOverVC.m 中缺失
忽视它很愚蠢……但是,是的,它现在起作用了。

[super loadView];

Was missing from ThePopOverVC.m
Pretty silly to overlook.. but yeah, it works now.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文