1

我遇到了一个与我的视图控制器有关的问题,并希望有人能帮助我:我的故事板的行为就好像视图控制器不存在,阻止我从连接到控制器。新创建的UIViewController在故事板中不可用

我在故事板中创建了一个自定义的自由形式视图控制器,它的目的是在弹出框中显示,允许用户使用弹出框的UITextView编辑UITextLabel

//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

我用下面的代码中动态实例化视图控制器为酥料饼

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

​​

当我测试的代码,它的工作原理 - 标签可以与酥料饼进行编辑,但我不能设置酥料饼内的文字,因为我不能文本视图链接到视图控制器。

我感谢您的帮助!

+0

我刚刚在Xcode 4.6.1(4H512)中创建了一个新项目,并创建了一个新的UIViewController子类。该课程在创建后即可在IB获得。也许你的班级不符合你的控制器类型,例如。它是IB中的UITableViewController,并且您试图将其设置为UIViewController。 – Adam 2013-03-20 00:47:50

回答

1

我想出了答案,它是一个复合材料,3件事。

  1. 我对这个项目做了一个“干净”,然后退出Xcode和重新启动它 - 这将清除一些莫名其妙的错误,在这种情况下所做的工作。我能在故事板
  2. 添加控制器我忘了IBOutlet旁边的TextView:@property(nonatomic,strong)IBOutlet UITextView* textView;
  3. 在酥料饼的情况下,TextView的属性是零,直到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; 
    

我希望有人认为这有用:不得不如下返工。

相关问题