質問

ボタンを含むUIViewControllerを持っています。ボタンを押すと、次のように子ビューコントローラを追加します。

- (IBAction)loadEditScreen:(id)sender {

self.editViewController = [[EditViewController alloc] init];

[self addChildViewController:self.editViewController];
[self.editViewController didMoveToParentViewController:self];

self.editViewController.view.alpha = 0;
[self.editViewController.view setFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];

[self.view addSubview:self.editViewController.view];

[self.editViewController setupImage:self.selectedImageView.image];

[UIView animateWithDuration:0.2
                      delay:0.0
                    options:0
                 animations:^{
                     self.editViewController.view.alpha = 1;

                 }
                 completion:^(BOOL finished){}];

}
- (void)closeEditScreen {

[self.editViewController willMoveToParentViewController:nil];
[self.editViewController.view removeFromSuperview];
[self.editViewController removeFromParentViewController ];

}
.

今問題は、必要なときに子供ビューコントローラの削除方法がわからないという問題があるようです。子コントローラ内では、以下を呼び出すボタンがあります。

- (IBAction)closeEditScreen:(id)sender {

HomeViewController *tmpController = [[HomeViewController alloc] init];
[tmpController closeEditScreen];

/*[UIView animateWithDuration:0.2
                      delay:0.0
                    options:0
                 animations:^{
                     self.view.alpha = 0;
                 }
                 completion:^(BOOL finished){
                     [self didMoveToParentViewController:nil];
                     [self.view removeFromSuperview];
                 }];*/

}
.

問題は、メソッドが呼び出されるが実際に起こるものは何もないようです。私はブレークポイントを設定しているので、私はその方法が機能していることを知っていても、ビューは削除されません。

任意の助けが素晴らしいでしょう。Pressedのときは、ChildViewControllerを追加してから子供の中にボタンを追加してください。

事前感あり

役に立ちましたか?

解決

EditViewController closeEditScreen:(子VC)では、HomeViewController(親VC)の新しいインスタンスを作成し、その新しいインスタンスにcloseEditScreenを呼び出しています。これは間違っています、あなたは新しいインスタンスを望みません。

代わりに何をしたいのかは、既に存在するcloseEditScreenインスタンスのHomeViewControllerを呼び出し、子VCを作成しました。これを試してください:

- (IBAction)closeEditScreen:(id)sender
{
  // This is the instance of HomeViewController that you need
  UIViewController* parentViewController = self.parentViewController;
  // Cast the type so that you can invoke closeEditScreen without a compiler warning
  HomeViewController* parentHomeViewController = (HomeViewController*)parentViewController;
  [parentHomeViewController closeEditScreen];
}
.

これにより、正しいHomeViewControllerインスタンスが機能する必要がありますが、子VCを削除するためのアプローチが他の問題がないかどうかはわかりません。もっと問題が発生した場合は、CY-4AHの回答に記載されているVCプログラミングガイドを間違いなく読む必要があります。

他のヒント

iOS のコントローラプログラミングガイドを表示します。あなたのコードは完全に間違っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top