0

ストーリーボードのリリース以来、addSubview と removeFromSuperview を使用するのは久しぶりです。明らかに、私はそれらを使用する方法を忘れていました。

したがって、私の UIViewControllerA には、ボタン用の次のコードがあります。

- (IBAction)buttonClickHandler:(id)sender {

    dyf_FacebookViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"Facebook"];
    [self.view addSubview:controller.view];

}

UIViewControllerB によって処理される UIView をロードします。これで、このビューをさまざまな ViewController からサブビューとして呼び出すことができるようになりました。これが、スーパービューからそれ自体を削除する理由です。

したがって、UIViewControllerB には次のコードがあります。

- (IBAction)close:(id)sender {

     [self.view removeFromSuperview];
}

残念ながら、それは不正なアクセス エラーで返されます。助けてください!

ありがとう

  • マイケル

編集:

追加されたサブビュー (サブビューのビューコントローラー) は、サブビューのボタンを制御しているため、それ自体を削除するために制御されます。したがって、ViewControllerA にある元の controller.view 変数にはアクセスできません。

4

4 に答える 4

1

dyf_FacebookViewController オブジェクトへの参照を保持する必要があるため、次のことができます。

- (IBAction)close:(id)sender {
    [controller.view removeFromSuperview];
}

あなたが今行っていることは、メイン ビューをそのスーパービューから削除することです。これは深刻な結果をもたらし、アクセスを悪化させる可能性があります。

于 2013-03-04T03:30:35.230 に答える
0

これを試して

- (IBAction)close:(id)sender {
for (UIView *subView in self.view.subviews) {
    [subView removeFromSuperview];
}
}
于 2013-03-04T04:20:05.197 に答える
0

追加したビューを削除する場合は、View Controller のコピーを保持してください...

// in this VC.m
@interface
@property (nonatomic, strong) dyf_FacebookViewController *dyfController;
@end

- (IBAction)buttonClickHandler:(id)sender {

    self.dyfController = [self.storyboard instantiateViewControllerWithIdentifier:@"Facebook"];
    [self.view addSubview:self.dyfController.view];
}

後で、ビューを閉じるには...

[self.dyfController.view removeFromSuperview];
于 2013-03-04T03:23:53.573 に答える
0
if ([controller.view superView]) {
    [controller.view removeFromSuperview];
}
于 2013-03-04T03:33:46.447 に答える