1

我的一个视图控制器遇到了问题,希望有人能帮助我:我的故事板表现得好像视图控制器不存在,阻止我与控制器建立连接。

我在情节提要中创建了一个自定义的自由形式视图控制器,其目的是显示在弹出框中,允许用户UITextLabel使用弹出框的UITextView.

我正在使用以下代码动态实例化弹出框的视图控制器:

//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 属性连接到视图控制器。

在此处输入图像描述

当我测试代码时,它可以工作 - 可以使用弹出框编辑标签,但我无法在弹出框内设置文本,因为我无法将文本视图链接到视图控制器。

我感谢您的帮助!

4

1 回答 1

1

我想出了答案,它是一个复合的,三件式的东西。

  1. 我对项目进行了“清理”,然后退出 xCode 并重新启动它——这清除了一些奇怪的错误,并且在这种情况下确实有效。我能够在情节提要中添加控制器
  2. 我忘了IBOutlet在textview旁边:@property(nonatomic,strong)IBOutlet UITextView* textView;
  3. 在弹出框的情况下,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;
    

我希望有人觉得这很有用。

于 2013-03-20T00:59:06.863 回答