我有两个视图控制器:SavePopOverVC
和MainVC
。我还有一个名为SavePopOver
的nib文件。 SavePopOver
有三个项目,UIButton
,UIImage
和UITextView
。图像和文本视图分别在property
中有SavePopOverVC
个字段的出口,分别称为captionImage和captionTextView。该按钮在IBAction
中有SavePopOverVC
的插座。
在MainVC.m
我的班级扩展中有以下两行。
SavePopOverVC *spvc;
UIPopoverController *popover;
在我同一档案的viewDidLoad
中,我有以下与我的popover有关的行。
spvc = [[SavePopOverVC alloc] initWithNibNamed:@"SavePopOver" bundle:nil];
popover = [[UIPopoverController alloc] initWithContentViewController:spvc];
在我显示弹出窗口的函数中,同样在MainVC.m
中,我有以下几行。
[popover setPopoverContentSize:CGSizeMake(600,200)];
[popover presentPopoverFromRect:_header.frame inView:self.view permittedArrowDirection:UIPopoverArrowDirectionAny animated:YES];
[((SavePopOverVC *)popover.contentViewController).captionTextView setText:@"Some text here"];
但是,captionTextView
拨打setText:
时,UIButton
为零。应用程序没有崩溃,但文本没有设置。显示弹出窗口后,我单击captionTextView
以保存键入captionTextView
的字符串,我得到的字符串就好了。所以,我知道这两个最终是正确链接的,但是如何在显示弹出窗口时设置{{1}}?
如果值得注意的话,我会用这个专门为iPad开发。
答案 0 :(得分:1)
很可能是nil
,因为在您设置文字时其视图未加载。与大多数其他现代语言不同,在Objective-C中调用nil
对象上的方法不会导致异常,它只是什么都不做。
要解决此问题,您可以在NSString
中创建自定义SavePopOverVC
属性,例如
@property (nonatomic, copy) NSString *caption;
在致电presentPopoverFromRect:
之前,请为此媒体资源指定一个值。在SavePopOverVC
内,覆盖viewDidLoad
并设置captionTextView.text = self.caption;
可能有人不同意我,但我不建议将UI控件作为视图控制器中的属性公开。这种行为是其中一个原因。