2010-11-28 111 views
1

我對Cocoa和Ojective-C非常陌生。 「隨你學習是我的哲學」。這是我的第一個可可項目。我基本上使用Interface Builder來創建一個主要的NSView(我們稱之爲MainView),其中我有兩個子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

我原來在10年11月問過這個問題。現在我已經獲得Objective-c的一些實驗,所以你的答案是正確的! – user523234 2011-07-05 22:37:48

0

我找到了本網站另一篇文章的答案。這是我的解決方案: 我在view1.m中的mouseDown事件中使用了這個[self.superview hideViews1]。其中hideViews1是一種來自MainView.m的方法,它將隱藏需要隱藏的所有視圖,[viewNS2 setHidden:YES]等。

+0

由於MainView和ViewNS1彼此瞭解,因此會創建一個循環依賴項。循環依賴是不好的,因爲它們會讓你的代碼更難以維護和理解。考慮重構使用視圖控制器,而不是使用MVC模式。 – 2010-11-30 18:39:51