1

ビュー コントローラーの 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];

私が作成したView Controllerは典型的なView Controllerのようです:

ここに画像の説明を入力

私が実行している問題は、オートコンプリートが、アプリで使用できるそのようなビュー コントローラーがないかのように動作することです。ここに名前を手動で貼り付けても、ストーリーボードの textView プロパティをビュー コントローラーに接続できません。

ここに画像の説明を入力

コードをテストすると動作します。ラベルはポップオーバーで編集できますが、テキスト ビューをビュー コントローラーにリンクできないため、ポップオーバー内にテキストを設定できません。

私はあなたの助けに感謝します!

4

1 に答える 1

1

私は答えを理解しました、それは複合、3ピースのものです。

  1. プロジェクトで「クリーン」を実行してから、xCodeを終了して再起動しました。これにより、いくつかの奇妙なバグが解消され、この場合は機能しました。ストーリーボードにコントローラーを追加できました
  2. IBOutlettextviewの横を忘れました:@property(nonatomic,strong)IBOutlet UITextView* textView;
  3. ポップオーバーの場合、ポップオーバーが表示された後にviewDidLoadが呼び出されるまで、textViewプロパティはnilであるため、コードを次のように作り直す必要がありました。

    //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 に答える