2010-11-28 7 views
1

私はCocoaとOjective-Cをとても使い慣れています。 "あなたが行くように学ぶことは私の哲学です"。これが私の最初のCocoaプロジェクトです。別のサブビュークラスからサブビューを隠す

基本的に、Interface Builderを使用してメインNSView(MainView)を作成しました。そこには2つのサブNSView(ViewNS1とViewNS2とします)があります。また、ViewNS1はview1クラスにバインドされ、ViewNS2はview2クラスにバインドされます。

ViewNS1をクリックすると、ViewNS2ビューが非表示になります。私のview1クラスのview1.mファイルで、私は - (void)mouseDown:(NSEvent *)イベントでこの[viewNS2 setHidden:YES]を持っています。実行中にエラーはありませんでしたが、動作しません。しかし、私はMainView.m内から[viewNS2 setHidden:YES]を正常に実行することができ、正常に動作しました。また、view1.mから[viewNS1 setHidden:YES]を実行すると、ビューが非表示になります。

これは非常に基本的で基本的なものだと思いますが、解決策を見つけることができませんでした。

「教えている瞬間」誰ですか?

答えて

2

ViewNS1コントローラは、クリックに反応してViewNS2を非表示にする必要があります。 ViewNS1は、これらの依存関係を排除して結合を減らすために、ViewNS2の直接的な知識(つまり、MVCパターンの全体点)を持つ必要はありません。

+0

元は11月10日に質問しました。今私はObjective-cでいくつかの実験をしていますので、あなたの正解です! – user523234

0

このサイトの別の投稿から回答が見つかりました。これは私の解決策です: 私はview1.mの私のmouseDownイベントでこの[self.superview hideViews1]を使用します。 hideViews1は、非表示にする必要があるすべてのビューを非表示にするMainView.mのメソッドです。[viewNS2 setHidden:YES]

+0

これは、MainViewとViewNS1が互いを知っているため、循環依存関係を作成します。循環依存性は、コードを維持し理解するのを困難にするため、悪いことです。代わりに、MVCパターンに従うビューコントローラを使用するようにリファクタリングすることを検討してください。 –

+0

ええ、私はまだ学ぶ必要があるMVCのこと。コメントしてくれてありがとう! – user523234

関連する問題