ios - ReactiveCocoa - 停止命令

标签 ios objective-c reactive-programming reactive-cocoa

我有一个搜索文本字段,当用户开始输入时,它会向用户提供自动完成建议的列表。 用户也可以点击建议或按键盘的搜索按钮以使用输入文本执行搜索。

如果用户开始输入内容,然后在等待建议出现之前按下搜索,则可能会出现以下情况:建议表将在搜索完成后打开。由于建议结果是通过 RACCommand 触发的,因此我需要一种方法来在搜索开始时停止此类命令。

以下是搜索建议的方式:

@weakify(self);
[[[self.searchTextField.rac_textSignal.distinctUntilChanged ignore:@""] throttle:0.5] subscribeNext:^(id x) {
    @strongify(self);
    [self.suggestionsViewModel.rac_searchSuggestions execute:self.searchTextField.text];
}];

[self.suggestionsViewModel.rac_searchSuggestions.executionSignals.flatten
    subscribeNext:^(id x) {
        @strongify(self);
        [self.suggestionsTableView reloadData];
        [self viewDidLayoutSubviews]; // Update the suggestions table frame
}];

通过文本字段进行搜索是通过以下方式触发的:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [self.productsViewModel.rac_reloadCommand execute:textField.text];
    [textField resignFirstResponder];
    return YES;
}

如何停止建议查找并禁止重新加载其表?

基于Cancel RACCommand execution看来解决方案是使用 takeUntil 运算符。 这是 rac_searchSuggestions,它应该是“搜索建议直到产品搜索开始”的翻译:

self.rac_searchSuggestions = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
    @strongify(self);
    return [[self rac_getProductsSuggestionsWithParameters:@{@"query":input}] 
            takeUntil:self.productsViewModel.rac_reloadCommand.executionSignal]];
}];

不幸的是,takeUntil 运算符没有效果。

非常感谢, 丹

最佳答案

我认为问题是由throttle引起的。它延迟了 searchTextFieldnext

  • 如果在您点击搜索按钮之前下一个到达,则一切正常。
  • 如果它晚于到达,rac_getProductsSuggestionsWithParameters 无论如何都会执行。

所以需要检查后一种情况。例如:

if (self.searchTextField.isFirstResponder) {
    [self.suggestionsViewModel.rac_searchSuggestions execute:self.searchTextField.text]; 
}

关于ios - ReactiveCocoa - 停止命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33033100/

相关文章:

iphone - Facebook SSO 未登录(isSessionValid 始终返回 NO)

ios - 如何通过带参数的方法将 UIButton 设置为 Action 实现?

swift - Rx swift : Nested Queries and ReplaySubject

azure - 使用 Reactive X 流处理来自事件中心的数据

typescript - 如何从angular2中的observable中获取数据

ios - 你能改变 UIDatePicker 的字体大小吗?

ios - iOS 是否支持在 UIKit 类中使用任何形式的位图字体?

ios - 数组中最后添加的对象

iphone - 将事件添加到 iPhone 应用程序的 iCal 中

objective-c - 如何将 nsstring 转换为 nsdictionary?