2015-10-13 20 views
1

我有一個UITextField,並嘗試以textField.text變化作出反應:無文本框信號不會觸發刪除

self.textField.delegate = self; 
[self.textField.rac_textSignal map:^id(NSString *text) { 
    return @(YES); // breakpoint here 
}]; 

我正在通過tutorial學習ROC。我注意到,當我輸入新字符時,該塊被調用,但是當我刪除舊字符時不會。如何解決它..?我希望在刪除前一個字符時調用該操作。


例如:左側裏面是什麼textField.text,在正確的 - 發生了什麼:

  • a - 命中斷點
  • ab - 命中斷點
  • abc - 命中斷點
  • ab - 沒有任何反應

免責聲明:正如我剛學這個框架,不想讓不同版本的第一個步驟,我使用的ROC相同版本的教程:

pod 'ReactiveCocoa', '2.1.8' 

回答

1

你可以看看這段代碼運行得很好,而不是你的。

[self.usernameTextField.rac_textSignal subscribeNext:^(id x) { 
    NSLog(@"%@", x); 
}]; 

不同的是,我的代碼有一個subscribeNext:方法調用。 這裏的基本概念是,你需要訂閱來執行你的代碼。 map:是僅當數據到達時才更改輸入數據的運算符。 subscribeNext:/subscribeCompleted:/subscribeError:是強制信號向ReactiveCocoa中的鏈發送數據的根本原因。

也許您應該閱讀ReactiveCocoa團隊的official framework overview

UPDATE:

對於應用subscribeNext到年底將解決問題的現狀:

[[self.usernameTextField.rac_textSignal 
    map:^id(id x) { 
    NSLog(@"%@", x); 
    return x; 
}] 
    subscribeNext:^(id x) { 
    NSLog(@"%@", x); 
}]; 
+0

嗯,我每次更新的文字,我收到'map'功能整個字符串。在我看來,在字符刪除期間,整個字符串也會發生變化,因此應調用'map'函數。正如你所說的:_僅當數據到達時才改變輸入數據,爲什麼數據沒有到達?數據改變了,文字改變了。 Atm我不明白文檔中的這一部分。你的回答是可以的,所以我將其標記爲有效,但我很樂意解釋我的問題 - 我仍然不明白_why_數據沒有到達'map'函數。 – Vive

+0

@Vive,你不應該依賴沒有訂閱的鏈,[[self.usernameTextField.rac_textSignal map:^ id(id x){ NSLog(@「%@」,x); (@「%@」,x); }]; – skyylex

+0

謝謝,這有助於很多:) – Vive