2011-09-29 44 views
2

我有5個按鈕和5個文本字段。我希望設置綁定,以便按鈕1僅在文本字段2-5具有值時啓用.....按鈕2僅在文本字段1 & 3-5具有值等時啓用。可可綁定:啓用一個按鈕,如果多個文本框有值

I'我剛開始學習可可綁定。我希望我可以使用它們來管理按鈕的啓用/禁用。當我嘗試在其中一個按鈕上設置啓用綁定時,它不會讓我引用文本字段。

這是可能的(和正確的)與綁定?

回答

0

綁定不是有條件的,或者至少在這方面是不透明的。你將不得不在代碼中這樣做。檢查您的文本字段文本更改回調,並相應地啓用按鈕。應該只是幾行代碼。

+0

有一個'enabled'綁定,並且有一個值轉換器可以用來綁定屬性是否爲'nil'。 –

+0

是的,但這是一個相當複雜的方法。在處理程序中,邏輯會產生更多可讀的代碼,你不覺得嗎? – Mundi

+3

這會導致更多的代碼。已啓用的綁定堆棧:您可以將啓用的綁定到一個屬性,將enabled2綁定到另一個屬性等,全部在IB中。正如Cocoa Bindings Reference中所記錄的那樣,enabled屬性的最終值是所有綁定值的AND。 –

3

您將無法直接在bitton的綁定中引用文本字段。

來解決這種情況的方法是創建一個NSObject的子類 - 稱之爲ButtonController - 並有實例瓦爾爲5個文本框:

@inteface ButtonController : NSObject 
{ 
    NSString *text1; 
    NSString *text2; 
    NSString *text3; 
    ... 
} 

@property(nonatomic, retain) NSString *text1; 
@property(nonatomic, retain) NSString *text2; 
... 

在XIB文件,實例化一個對象的ButtonController。現在你可以將東西綁定到按鈕控制器實例上。

接下來,將所有文本字段綁定到相應的NSString屬性。

然後,你可以將按鈕的啓用屬性綁定到ButtonController的屬性。當你綁定button1的enabled屬性時,將它綁定到text2並勾選valuetransformer框並選擇「NSIsNotNil」。一旦你這樣做,第二enabled2綁定變得可用,你可以綁定它到text3等

我認爲這將工作,但還沒有嘗試過呢。

+0

如果您只爲64位構建,您可以省略顯式的ivars,因爲您可以在實現中將它們(以及訪問器)進行綜合。 –

相關問題