我遇到一个我的视图控制器的问题,希望有人可以帮助我:我的情节提要的行为就像视图控制器不存在一样,阻止了我与控制器的连接。

我在情节提要中创建了一个自定义自由格式视图控制器,其目的是在弹出窗口中显示,允许用户使用弹出窗口的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];

在我看来,我制作的视图控制器是典型的视图控制器:

我正在运行的问题是自动完成的行为就像我的应用程序中没有这样的视图控制器一样。 即使我在此处手动粘贴其名称,也无法将StoryView的textView属性连接到视图控制器。

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

我感谢您的帮助!

最佳答案

我想出了答案,这是一个三件套的复合材料。

  • 我在项目上做了一个“ clean ”,然后退出xCode并重新启动它-清除了一些怪异的bug,在这种情况下可以正常工作。我能够在情节提要中添加控制器
  • 我忘记了textview旁边的IBOutlet:@property(nonatomic,strong)IBOutlet UITextView* textView;
  • 如果是弹出窗口,则 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;
    

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

    关于ios - 新创建的UIViewController在 Storyboard 中不可用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15513185/

    10-15 08:09