新创建的UIViewController在故事板中不可用

时间:2013-03-20 00:38:27

标签: ios uiviewcontroller uipopovercontroller uistoryboard xcode4.6

我遇到了一个我的视图控制器的问题,我希望有人可以帮助我:我的故事板就像视图控制器不存在一样,阻止我建立连接控制器。

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

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

enter image description here

我正在运行的问题是自动填充的行为就好像我的应用中没有这样的视图控制器。即使我在这里手动粘贴它的名字,我也无法连接textView属性从故事板到视图控制器。

enter image description here

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我找到答案,这是一个复合的,3件事。

  1. 我在项目上做了一个“ clean ”,然后退出xCode并重新启动它 - 这清除了一些奇怪的错误,并在这种情况下工作。我能够在故事板中添加控制器
  2. 我在textview旁边忘了IBOutlet@property(nonatomic,strong)IBOutlet UITextView* textView;
  3. 如果是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;
    
  4. 我希望有人觉得这很有用。