2015-04-17 52 views
0

我正在嘗試編寫一個應該顯示一些數據的應用程序。有問題的數據來自我們的代碼中的不同模塊(用C編寫,而不是ObjC),並且由於各種原因由字符串標識,而不是整數或其他形式的常量。膠水代碼後,我有一個像這樣在我的AppDelegate傳入方法:按字符串在NIB內搜索NSView

-(void)newstringdata:(NSString*)data withLabel:(NSString*)label; 

此方法應始終以data值,並將其設置爲文本在UI中的特定標籤。問題是,哪個標籤。

我當然可以創建一個NSDictionary並在運行時用方法中的label參數的可能值填充它,並參考插座,但這看起來有點醜陋和低效;它需要我維護網點,筆尖NSDictionary - 初始化代碼。

相反,如果可能的話,我想在某處設置界面設計器中的屬性,然後根據傳遞的標籤在我的newstringdata:withLabel:方法中進行查找,該標籤返回NSLabel

這可能嗎?如果是這樣,我該怎麼做?

+0

如何是你的設計在某種程度上依賴於通過識別標籤字符串的看法,當你還沒有想出如何標籤串分配到的意見,甚至如果你可以的話?也就是說,您展示的方法的調用者在哪裏首先獲得標籤字符串?它如何確定這些標籤字符串對應於視圖?什麼是一組可能的標籤字符串?等。 –

+0

我從另一個模塊獲取數據,該模塊通過名稱來識別數據,這是一個字符串。這不是我控制的東西;這是我如何獲得數據。 –

+0

沒錯,但是這些數據與你的觀點無關。我建議您將數據存儲在控制器的字典屬性中。然後,通過該屬性將視圖綁定到控制器,如果有的話,視圖有意義的值。也就是說,通過讓視圖/綁定找到數據來顛倒問題,而不是根據數據找到視圖。 –

回答

0

如果label的值永遠不會包含斜線(/),反斜線(\)或冒號(:),則可以使用NSView的標識屬性。

在xib中,輸入每個標籤字符串作爲NSTextViews的標識符(在「標識」選項卡中,左起第三個標籤)。

在你的代碼

然後,遍歷所有的意見和:

if ([aView.identifier isEqualToString:label]) 
    [aView setStringValue:data]; 
+0

這是有效的,只要我確認我正在循環的aView對象實際上實現了NSUserInterfaceItemIdentification協議,它只有頂級的協議;如果我在窗口和(遞歸)子視圖上調用「子視圖」,最終你會得到一個不支持的NSView。 –

+0

好的,然後將第一行改爲:if([aView isKindOfClass:[NSTextView class]] && [aView.identifier isEqualToString:label]) –