我已經構建了一個自定義NSView。基本上,對於我選擇的樹視圖中的每個項目,我想將視圖與另一個交換。使用NSTreeView交換視圖
我的問題是,我應該使用類似NSArrayController這樣的東西?如果是這樣,你如何掛鉤自定義NSView使用NSArrayController 和基於NSTreeView中的選擇視圖之間的交換?
我已經構建了一個自定義NSView。基本上,對於我選擇的樹視圖中的每個項目,我想將視圖與另一個交換。使用NSTreeView交換視圖
我的問題是,我應該使用類似NSArrayController這樣的東西?如果是這樣,你如何掛鉤自定義NSView使用NSArrayController 和基於NSTreeView中的選擇視圖之間的交換?
你可以使用一個NSArrayController
做到這一點但有一對夫婦的積分,您必須考慮:
每個NSView
應該由NSViewController
進行控制,因此,你從最好存放一些標識在NSArrayController
您可以扣除控制器類和關聯的NIB。一旦擁有NSViewController
類名稱,就可以實例化它,並使用initWithNibName:
方法加載伴隨的視圖。
介紹「電流控制器」的概念可能是一個好主意。這樣,您在任何時候只能在內存中擁有一個控制器(以及相關的視圖和模型對象圖)。一旦您根據樹視圖中的選擇交換控制器,舊的控制器及其所有關聯的對象將從內存中釋放。
例子:
NSArrayController
:@"Customers"
@"CustomersViewController"
@"CustomersView"
通過陣列中存儲@"Customers"
可以抵扣了正確的控制器班級名稱和相關的NIB:
NSString *aControllerName = [anIdentifier stringByAppendingString: @"ViewController"];
NSString *aNibName = [anIdentifier stringByAppendingString: @"View"];
Class aControllerClass = NSClassFromString(aControllerName);
[self setCurrentController: [[aControllerClass alloc] initWithNibName: aNibName bundle: [NSBundle mainBundle]]];
在上面的代碼anIdentifier
將保留值@"Customers"
並可能源自您的NSArrayController
。上例中的self
指您的頂級控制器(其類取決於您的設計)。
實際觀看交換可以做如下:
[[self currentController] view] removeFromSuperView];
... do swapping ...
[[self view] addSubview:[[self currentController] view]];
如果存儲的標識符與填充你的樹視圖中的數據源,你可能不會需要一個單獨的NSArrayController
,你就可以直接坐樹視圖中所選對象的標識符。