5

これはばかげた間違いだと思いますが、過去1時間、スーパービューからサブビューを削除しようとしていますが、成功しませんでした。

私の最初のビューで私は持っています

UIViewController *helpView = [[[UIViewController alloc] initWithNibName:@"HelpView" bundle:nil] autorelease];
[self.view addSubview:helpView.view];

そして、helpViewの中に、「closeHelp」と呼ばれるIBActionに接続されたボタンがあります。これは次のことを実行します。

- (IBAction) closeHelp{
    [self.view removeFromSuperview];
}

しかし、これにより、奇妙な理由で私のアプリがEXC_BAS_ACCESSでクラッシュします。これがヘルプビュー内にある場合でも、self.viewが正しいサブビューを指している必要があります。

あなたの助けをいただければ幸いです

ありがとうございました。
シャイ。

4

5 に答える 5

5

アンドレアスが答えたように、あなたはそのスーパー/親ビューからself.viewを削除しようとしています。基本的に、親ビューからhelpViewを削除する必要があります。

だからそれは

- (IBAction) closeHelp{
    [helpView removeFromSuperview];
}

しかし、上記のメソッドの「helpView」が何であるかはわかりません。ハンドルがないので。

したがって、コードは最終的に次のようになります。

#define HELP_VIEW_TAG 101 // Give tag of your choice

HelpView *helpView = [[HelpView alloc] initWithNibName:@"HelpView" bundle:nil];
helpView.view.tag = HELP_VIEW_TAG;
[self.view addSubview:helpView.view];
[helpView release];

- (IBAction) closeHelp{
    UIView *helpView = [self.view viewWithTag:HELP_VIEW_TAG];
    [helpView removeFromSuperview];
}
于 2011-07-09T08:34:36.383 に答える
2

self.viewはサブビューではなく、uiviewcontrollerが管理するルートビューを指します。ヘルプビュー全体を削除するため、ビュー全体ではなく、サブビュースタックの最後のオブジェクトのみを削除する必要があります。

とにかく、これを行う代わりに、なぜビューコントローラーをモーダルに提示しないのですか?

[self presentModalViewController:helpView animated:NO/YES];

helpView. modalTransitionStyle = //One of the constants below

UIModalTransitionStyleCoverVertical
UIModalTransitionStyleFlipHorizontal
UIModalTransitionStyleCrossDissolve
UIModalTransitionStylePartialCurl

通常、私はself.modalTransitionStyle = // One of the constants コードを拡散する代わりに、モーダルで表示されるビューコントローラーで記述しています。

于 2011-07-09T08:20:12.333 に答える
1

として初期化helpViewしていUIViewControllerます。初期化するViewControllerのファイルに(またはhelpView .hファイルが呼び出されているものは何でも)ある
ことを確認してください。#import "HelpView.h".h

次に、次のコードを使用します。

HelpView *helpView = [[HelpView alloc] initWithNibName:@"HelpView" bundle:nil];
[self.view addSubview:helpView.view];

それはそれを修正する必要があります。

于 2011-07-09T08:23:12.267 に答える
0

最終的に私にとって最も簡単な解決策は、XIBのファイル所有者を親コントローラーと同じクラスとして定義することでした。つまり、親コントローラーが親とサブビューの両方を制御するため、非常に簡単になります。:)

于 2011-07-09T20:21:14.603 に答える
-1
Declare the help view on calss level.

in.h file 

@class HelpView;
..
@interface
{
HelpView *helpView;
}
@property(nonatomic,retain)HelpView*  helpView;


In.m file 
#import "HelpView"
@synthensize helpView;



now add this Code where you want 

helpView = [[HelpView alloc] initWithNibName:@"HelpView" bundle:nil];
helpView.view.tag = HELP_VIEW_TAG;
[self.view addSubview:helpView.view];


- (IBAction) closeHelp{
    //UIView *helpView = [self.view viewWithTag:HELP_VIEW_TAG];
    [helpView removeFromSuperview];
}

-(void)dealloc {[helpView release]; }

于 2011-07-09T09:33:09.377 に答える