2011-07-09 13 views
5

私はこれがいくつかのばかげた間違いだと確信していますが、私は何も成功していないスーパービューからサブビューを削除するために過去1時間努力しています。私の最初のビューでremoveFromSuperviewは私のアプリがクラッシュするようにします

私は

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で奇妙な理由でクラッシュすることがあります。これはHelpViewの中にあってもself.viewは正しいサブビューを指しているはずです。

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

ありがとう。
Shai。

+0

どのクラスに '-closeHelp'がありますか?インタフェースビルダーに正しく配線されていますか? HelpView.xibのクラスをそのクラスに設定しましたか? – Eiko

答えて

5

Andreasが答えたとおり、あなたはsuper/parentビューから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]; 
} 
+0

ねえ、ありがとう!私はこのソリューションをやってみましたが、サブビューはロードされません...(EXC_BAD_ACCESS) UIViewController * helpView = [[[UIViewController alloc] initWithNibName:@ "HelpView" bundle:nil] autorelease]; helpView.view.tag = HELP_VIEW_TAG; [self.view addSubview:helpView.view]; [helpView release]; –

+0

これで、リリースで何か愚かなことが表示されますが、閉じるボタンはまだ機能しません。 UIView * helpView = [self.view viewWithTag:101]; [helpView removeFromSuperview]; (例の場合のみタグ番号をハードコードしました) –

+0

ヘルプビューがサブビューとして追加され、表示されることを願っています。ヘルプビューに閉じるボタンがあり、上記のコード内のアクションメソッドにリンクされていると想像していますが、それは自明ではありませんが、これは正しいのですか? –

2

self.viewはサブビューを指していませんが、uiviewcontrollerが管理するルートビューです。おそらく、全体ビューだけでなく、サブビュースタック内の最後のオブジェクトだけを削除するべきでしょう。これは、ヘルプビュー全体を削除するためです。

とにかく、これを行うのではなく、なぜviewcontrollerをモーダルで表示しないのですか?

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

helpView. modalTransitionStyle = //One of the constants below 

UIModalTransitionStyleCoverVertical 
UIModalTransitionStyleFlipHorizontal 
UIModalTransitionStyleCrossDissolve 
UIModalTransitionStylePartialCurl 

通常私の代わりに拡散コードの、モーダルモードで表示されるのViewControllerにself.modalTransitionStyle = // One of the constants を書いています。

+0

このメソッドは、とにかくHelpViewControllerに属し、最後のセンテンスはここで意味を持ちません。ビュー階層を変更する場合は、ビューをロードする必要があります。ビューを参照するには、self.viewが適切な方法です。 – Eiko

1

helpViewUIViewControllerとして初期化しています。
初期化するビューコントローラの.hファイルに、#import "HelpView.h"(またはhelpView .hファイルが呼び出されたもの)があることを確認してください。

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

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

はその後、このコードを使用します。

+0

彼は基本的にコード内でsuperviewからself.viewを削除しようとしていますが、これは恐らくnilでなければなりません。 –

+0

これはおそらく正解です。 – Abizern

-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]; 
} 

- (ボイド)のdealloc {[helpViewリリース]。 }

+0

?私は親を推測している?このファイルの.mの –

+0

add - (void)dealloc {[helpView release]} – dark

+0

ビューコントローラの代理人を追加することはあまりありません。それは初心者を混乱させる; P – Greg

0

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

関連する問題