CocoaAction / 带有 UIAlertController 的操作
Posted
技术标签:
【中文标题】CocoaAction / 带有 UIAlertController 的操作【英文标题】:CocoaAction / Action with UIAlertController 【发布时间】:2016-08-23 21:09:22 【问题描述】:我正在尝试使用 Action / CocoaAction 库。 目前的主要用途是显示 UIAlertController,当点击 UIAlertAction 按钮时,它必须调用我的 viewModel 中定义的函数(changeAddress 返回 Observable)。
我对此的理解是:
let ac = CocoaAction(workFactory: [unowned self] _ in
self.viewModel!.requestChangeAddress()
.subscribeNext( [unowned self] data in
if let response = data?.result
self.showResultOperation(response)
)
.addDisposableTo(self.disposeBag)
return .empty()
)
let OKAction = UIAlertAction.Action("OK", style: .Default)
OKAction.rx_action = ac
但不幸的是,它不起作用。 workFactory 闭包被正确调用,但订阅没有生效。当我返回 .empty 时,我知道出了点问题,但我不明白如何解决。
我该如何纠正这个问题?我做错了什么?
【问题讨论】:
【参考方案1】:好问题!感谢您发布代码。
所以您的代码从requestChangeAddress
获取可观察对象,但随后它订阅它并将其添加到处理包中。 Action
课程实际上会为您处理这些问题,您只需退回一次性用品。
问题是你想对动作中发送的值做一些事情,而返回 observable 不会让你这样做。因此,您需要在观察者链中包含对doOnNext
的调用。下面是它的样子:
let ac = CocoaAction(workFactory: [unowned self] _ in
return self.viewModel!
.requestChangeAddress()
.doOnNext( [unowned self] data in
if let response = data?.result
self.showResultOperation(response)
)
.map _ in Void()
)
在 RxSwift 中使用 doOn
函数是在必要时将副作用注入到 observables 中的好方法,就像这里一样。
编辑:我在最后添加了映射来修复编译器错误,因为工厂方法的返回类型是Observable<Void>
。
【讨论】:
谢谢,我试过这样做,但在第一行编译器给出了这个错误:“无法将类型 '()->Observable' 的值转换为类型的预期参数' -> 可观察的<_>'" 谢谢...几乎一切都好。我有一个与此相关的问题......在alertContoller中点击确定或取消后,按钮看起来像已禁用,不再触发触摸。我该如何解决这个问题?以上是关于CocoaAction / 带有 UIAlertController 的操作的主要内容,如果未能解决你的问题,请参考以下文章
UIAlertView 显示方法与新的 UIAlertController 对象等效吗?
如何处理: UIActionSheet deprecated (iOS8) X UIAlertController not supported (iOS7)
带有多个链接的 NSAttributedString 的 UILabel,带有行限制,显示尾部截断,带有未见文本的 NSBackgroundColorAttributeName