• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - ReactiveCocoa 将最新消息与按钮按下和文本字段代表信号相结合

[复制链接]
菜鸟教程小白 发表于 2022-12-13 08:06:58 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我创建了一个信号来包装 UITextField 委托(delegate)方法 textFieldShouldReturn:

- (RACSignal *)textFieldReturnPressed
{
    return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        [[self rac_signalForSelectorselector(textFieldShouldReturn
                       fromProtocolprotocol(UITextFieldDelegate)]
        subscribeNext:^(RACTuple *tuple) {
            [subscriber sendNext:tuple.first];
        }];

        return nil;
    }];
}

在 viewDidLoad 中,我尝试订阅此信号和按下按钮的组合。实际上,我希望用户能够点击一个按钮并做一些事情(登录),或者按键盘上的返回并做同样的事情(登录)。

我创建了以下信号来组合这两个信号:

RACSignal *loginSignal = [RACSignal
                          combineLatest[[loginButton
                                                     rac_signalForControlEvents:UIControlEventTouchUpInside],
                                                    [self textFieldReturnPressed]]];

然后我像这样订阅这个事件:

[loginSignal
    subscribeNext:^(id x) {
        NSLog(@"%@", x);
    }];

当我按下键盘上的返回键时,上面的日志不会打印(尽管我已经验证 sendNext 是从信号中调用的)。但是,当我触发登录按钮信号时,日志会打印 ie。 combineLatest 通过信号。

我已经尝试将 startWith:nil 添加到 loginButton 信号,因为正如我在其他帖子/Github 问题中发现的那样,CombineLatest 要求每个信号至少发送一次,但我的流会立即执行。

我确信我可以在那个时候以某种方式过滤以防止流执行,但这感觉有点 hacky。有什么建议吗?



Best Answer-推荐答案


combineLatest 没有达到预期效果的原因是它需要传递的每个信号至少发送一个下一个事件,以便订阅者开始接收下一个事件。

要实现您想要的效果,即两个信号,每个信号都传递下一个事件,而与另一个状态无关,您应该merge:信号。

例子:

RACSignal *loginSignal = [[loginButton 
                          rac_signalForControlEvents:UIControlEventTouchUpInside] 
                         merge:[self textFieldReturnPressed]];

关于ios - ReactiveCocoa 将最新消息与按钮按下和文本字段代表信号相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30903342/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap