gpt4 book ai didi

ios - "contentSizeForViewInPopover"- 这是做什么的?

转载 作者:行者123 更新时间:2023-12-01 19:09:10 31 4
gpt4 key购买 nike

这既是一个问题,也是一个解决方案。

我最近在我的 iPad 应用程序中添加了一个非常简单的带有 .xib 的 UIViewController,它只包含一个 UIDatePicker 和一个 UILabel,我希望在我的 iPad 应用程序中显示为弹出窗口。

Storyboard

我添加了所有相关代码以将此 .xib 显示为弹出窗口。没有错误或警告,我的 UIViewController 类被设置为这个 .xib 的“类”,两个控件都显示它们链接到这个特定文件中的 IBOutlets。

但是,当我运行该应用程序时,弹出窗口会显示得非常好,但如果我尝试访问与这两个控件有关的任何内容,则不会发生任何事情。

因此,例如,以下代码尝试设置标签的文本,更改 UIDatePicker 的模式……但什么都不会发生。我尝试了断点,代码 WAS 正在运行,控件确实有一个值(它们不是 nil)但是这段代码不会做任何事情。 UILabel 的文本不会更改,DatePicker 将继续处于“日期和时间”模式等。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {

// Custom initialization
[self.datePicker addTarget:self action:@selector(LabelChange:) forControlEvents:UIControlEventValueChanged];

self.lblQuestion.text = @"Is this working...?";
self.datePicker.datePickerMode = UIDatePickerModeDate;
self.datePicker.date = [NSDate date];
}
return self;
}

最终 - 最终 - 我添加了一行代码来设置“contentSizeForViewInPopover”:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {

// Without this line of code, the code-behind doesn't communicate
// with the controls in this .xib
self.contentSizeForViewInPopover = self.view.bounds.size;

// ... etc ...

...突然间,它工作得很好。

enter image description here

所以,我的问题是……为什么?!

这一行代码到底是做什么的,它突然让我可以设置我的 UILabel 的文本,并可以与 UIDatePicker 控件对话......?

我非常习惯 XCode 的怪癖和崩溃,但我很困惑为什么这突然让我的代码开始工作。我松了一口气,这个怪癖“只”浪费了我生命中的几个小时……并且想了解其背后的原因。

顺便说一句,这是 XCode 4.6.3,在 iPad 的 iOS 6.1 SDK 应用程序上运行。

最佳答案

加载 Nib 时连接导出。当您第一次访问 Controller 的 View 时,会加载 nib。

换句话说,在您的初始化程序中,您的所有导出都为零。但是,如果您调用 self.view ,您的 View 被加载并且 socket 已连接。 contentSizeForViewInPopoverbounds.size无关紧要。

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.view; //this is enough
...

这就是为什么您不应该将此类代码放入初始化程序中,而应放入 viewDidLoad 中的原因。反而。
- (void)viewDidLoad {
[self.datePicker addTarget:self
action:@selector(LabelChange:)
forControlEvents:UIControlEventValueChanged];

self.lblQuestion.text = @"Is this working...?";
self.datePicker.datePickerMode = UIDatePickerModeDate;
self.datePicker.date = [NSDate date];
}

关于ios - "contentSizeForViewInPopover"- 这是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17795034/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com