У меня есть текстовое поле поиска, которое предлагает пользователю список предложений автозаполнения, когда он начинает печатать. Пользователь может альтернативно нажать на предложение или нажать кнопку поиска на клавиатуре для выполнения поиска с помощью вводимого текста.ReactiveCocoa - Остановка команды
Может случиться так, что если пользователь начнет печатать, а затем нажимает на поиск до того, как появятся предложения, таблица предложений будет открыта после завершения поиска. Поскольку результат предложений запускается с помощью 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 не имеет никакого эффекта.
Большое спасибо, DAN
Возможный дубликат [Отменить выполнение RACCommand] (http://stackoverflow.com/questions/23784097/cancel-raccommand-execution) –
Я забыл добавить часть, где я использую оператор takeUntil см мое редактирование выше. Благодаря! – DAN