簡體   English   中英

如何在沒有相同數量的屬性或出口的情況下訪問許多Cocoa控件?

[英]How can I access many Cocoa controls without the same number of properties or outlets?

我正在構建一個主從應用程序,其中的詳細信息視圖可能包含近100個字段。 模型對象使用外部庫來訪問文件中的元數據,並且不需要100個屬性。 數據從文件中檢索並由結構表示。 這些字段由枚舉標識,並使用Find(Enum)方法或lib提供的迭代器進行訪問,該迭代器對元數據中存在的所有字段進行迭代。

我想利用庫中的Enum / Find / iterator,而不必使用帶有getter / setter的100個屬性以及UI中文本字段和其他控件的100個出口。

與我在使用該庫的程序中看到的方法類似,我想基於元數據的枚舉FieldId使用switch()實現一個getter和一個setter。 在getter和setter中,我想以編程方式訪問UI中適當的文本字段或其他控件,以根據需要獲取或設置值。

當用戶在主視圖中選擇文件時,getter將遍歷所有詳細信息字段並顯示關聯的元數據字段的值。 當用戶保存文件時,我需要遍歷更改的字段,並使用適當的FieldId枚舉調用setter。

我是Cocoa / Obj-C的新手,我能想到的只是綁定-但是我可以將字段綁定到方法嗎? 我可以使用綁定將適當的元數據FieldId傳遞給getter / setter嗎?

在這種情況下,實際上擁有100個網點是否合適? 我是否應該考慮將字段/出口按邏輯分組並划分為幾個類的替代程序架構?

如果你想通過的若干意見類型相同(或具有相同的基本類型的公司,比如,能夠遍歷UIControl ),您可以使用IBOutletCollection和迭代對單NSArray提供。 另外,如果你在召喚從碼100場(這實際上使更多的意義),你為什么不只是把自己的意見,為NSMutableArrayNSMutableDictionary ,並讓他們通過這些訪問? 更妙的是,如果字段應該出現在同一個容器視圖,它足以問其子視圖與myContainerView.subviews得到一個數組。

考慮制作一個矩陣 它是一種單獨的控件,提供了單個單元格的二維矩陣。 文本字段單元格可能是最常見的。

要在筆尖編輯器中創建矩陣,請從單個文本字段開始。 然后,按住選項並調整其大小。 Xcode會將其轉換為文本字段單元的矩陣; 您可以通過拖動來確定每個維度中有多少個。

一旦有了矩陣並連接了插座,就可以通過x和y索引要求它提供單元格,然后可以像處理獨立字段一樣對這些單元格進行操作。

如后續問題之一所述, 如何綁定可可中NSDictionary子詞典的值? ,我最終將元數據預加載到一組嵌套數據結構中。

然后,我在每個字段中使用綁定來訪問/顯示適當的元數據。 如果修改了元數據(例如,通過在文本字段中編輯其值),我將擁有一種使用外部庫的API處理修改后的數據結構的方法。

最初讓我問這個問題的是我想直接使用內部API的內部數據結構或方法來獲取或設置每個文件中的數據。 我從錯誤的角度看待事物-以編程方式訪問GUI中的字段,而不是將GUI綁定到應用程序中的數據。 我應該更了解:)

感謝您的建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM