我遇到了一个我的视图控制器的问题,我希望有人可以帮助我:我的故事板就像视图控制器不存在一样,阻止我建立连接控制器。
我在故事板中创建了一个自定义自由形式视图控制器,其目的是以弹出窗口显示,允许用户使用弹出窗口UITextLabel
编辑UITextView
。
我使用下面的代码动态实例化popover的视图控制器:
//create a popover with a text view under a label to be edited,
// allowing the user to edit the label with the popover
GLAppDelegate* appDelegate = (GLAppDelegate*)[[UIApplication sharedApplication] delegate];
UIViewController *mvc = (UIViewController *)appDelegate.window.rootViewController;
PopoverTextViewController* textViewController = [mvc.storyboard instantiateViewControllerWithIdentifier:@"popoverTextViewController"];
textViewController.textView.text = ((OutlinedLabel*)v.attributedView).text;
textViewController.label = (OutlinedLabel*)v.attributedView;
[self.popover dismissPopoverAnimated:YES];
self.popover = [[UIPopoverController alloc] initWithContentViewController:textViewController];
[self.popover presentPopoverFromRect:v.attributedView.frame inView:v permittedArrowDirections:UIPopoverArrowDirectionUp|UIPopoverArrowDirectionDown animated:YES];
在我看来,我制作的视图控制器是一个典型的视图控制器:
我正在运行的问题是自动填充的行为就好像我的应用中没有这样的视图控制器。即使我在这里手动粘贴它的名字,我也无法连接textView属性从故事板到视图控制器。
当我测试代码时,它可以工作 - 标签可以用popover编辑,但是我无法在popover中设置文本,因为我无法将文本视图链接到视图控制器。
感谢您的帮助!
答案 0 :(得分:1)
我找到答案,这是一个复合的,3件事。
IBOutlet
:@property(nonatomic,strong)IBOutlet UITextView* textView;
如果是popover, textView属性为nil,直到弹出窗口后调用viewDidLoad ,因此必须按如下方式重新编写代码:
//create a popover under the label with a text view, allowing the user to edit the label with the popover
GLAppDelegate* appDelegate = (GLAppDelegate*)[[UIApplication sharedApplication] delegate];
UIViewController *mvc = (UIViewController *)appDelegate.window.rootViewController;
PopoverTextViewController* textViewController = [mvc.storyboard instantiateViewControllerWithIdentifier:@"popoverTextViewController"];
[self.popover dismissPopoverAnimated:YES];
self.popover = [[UIPopoverController alloc] initWithContentViewController:textViewController];
//before this call, all views of the controller are not loaded
[self.popover presentPopoverFromRect:v.attributedView.frame inView:v permittedArrowDirections:UIPopoverArrowDirectionUp|UIPopoverArrowDirectionDown animated:YES];
//once popover is presented, the textView is created and is available
textViewController.textView.text = ((OutlinedLabel*)v.attributedView).text;
textViewController.label = (OutlinedLabel*)v.attributedView;
我希望有人觉得这很有用。