小编chr*_*low的帖子

如何将多个观察者绑定到一个ControlProperty

我需要绑定slider.rx.value到具有不同映射的2个观察者。

slider.rx.value.map  { [unowned self] in self.formatter.string(from: NSNumber(value: $0)) ?? "" }
    .bindTo(textFieldAlpha.rx.text)
    .addDisposableTo(disposeBag)

slider.rx.value.map { Enhance.Global(alpha: $0) }
    .bindTo(enhance)
    .addDisposableTo(disposeBag)
Run Code Online (Sandbox Code Playgroud)

但我似乎只有最后一次绑定有效。如何实现呢?

ios swift rx-swift

3
推荐指数
1
解决办法
2948
查看次数

如何着色NSCollectionView的"过冲"背景

我已经在Ray Wenderlich的教程之后在我的Cocoa应用程序上实现了一个集合视图(非常有用,考虑到这个领域中有多少错误和破坏了Apple的API).

在本教程中,使用以下代码将集合视图的画布涂成黑色(所有代码都在视图控制器类的viewDidLoad()方法中):

collectionView.layer?.backgroundColor = NSColor.black.cgColor
Run Code Online (Sandbox Code Playgroud)

然而,当您使用 - 例如 - 魔术鼠标/滚轮来超过("橡皮筋")滚动时"窥视"的区域仍然是白色且非常分散注意力:

在此输入图像描述

我试图让整个内容区域变黑.在我的故事板,我同时设置的背景颜色NSScrollViewNSClipView包含集合视图为黑色,但它不会改变外观.还尝试了程序化的替代方案:为scrollview设置插座并调用:

self.scrollview.backgroundColor = NSColor.black
self.scrollview.contentView.backgroundColor = NSColor.black
Run Code Online (Sandbox Code Playgroud)

......没有效果.

另外,我尝试过:

collectionView.superview?.layer?.backgroundColor = NSColor.black.cgColor
Run Code Online (Sandbox Code Playgroud)

......但这也不起作用.

也不是:

self.view.layer?.backgroundColor = NSColor.black.cgColor
Run Code Online (Sandbox Code Playgroud)

要么:

self.view.window?.backgroundColor = NSColor.black
Run Code Online (Sandbox Code Playgroud)

更新:

我已将滚动视图的背景颜色设置为红色,并设置drawsBackgroundtrue(以IB和编程方式).对于文档NSScrollViewbackgroundColor属性说:

此颜色用于绘制内容视图中文档视图未覆盖的区域.

我在运行时验证了文档视图确实是我的集合视图:

if scrollview.documentView is NSCollectionView {
        print("Document is collection")
}
Run Code Online (Sandbox Code Playgroud)

但是,不显示红色,文档(集合视图)之外的区域保持白色.


更新2:我解雇了View Hierarchy Debugger,似乎drawsBackground运行时的值为false(我true在代码故事板中设置了它)!:

在此输入图像描述

(虽然背景颜色本身似乎有所反映)

macos cocoa appkit nscollectionview

3
推荐指数
1
解决办法
739
查看次数

Rxswift3.0中的油门和去抖有什么区别?

我见过很多关于油门和去抖的博客.大多数人都说他们是一回事.但是我从我的例子中得到了不同的结果?这是一个例子:

let disposeBag = DisposeBag()
Observable.of(1,2,3,4,5)
          .debounce(1, scheduler: MainScheduler.instance)
          .subscribe(onNext: {print($0)})
          .addDisposableTo(disposeBag)
Run Code Online (Sandbox Code Playgroud)

结果是5.但是当我使用油门时,结果是1

let disposeBag = DisposeBag()
Observable.of(1,2,3,4,5)
        .throttle(1, scheduler: MainScheduler.instance)
        .subscribe(onNext: {print($0)})
        .addDisposableTo(disposeBag)
Run Code Online (Sandbox Code Playgroud)

那么,我无法理解油门操作员?

ios swift rx-swift

3
推荐指数
1
解决办法
909
查看次数

将rx.value添加到我的CustomView

假设我有一个带有值的CustomView.我想使用rx.value(Observable)将该值公开给世界,而不是必须通过值(Int)访问它.

final class CustomView: UIView {
   var value: Int = 0
   ...
}
Run Code Online (Sandbox Code Playgroud)

我从UIStepper + Rx复制了这个:

extension Reactive where Base: CustomView {

    var value: ControlProperty<Int> {
        return base.rx.controlProperty(editingEvents: [.allEditingEvents, .valueChanged],
            getter: { customView in
                customView.currentValue
        }, setter: { customView, value in
            customView.currentValue = value
        }
        )
    }

}

final class CustomView: UIControl {

    fileprivate var currentValue = 1 {
        didSet {
            checkButtonState()
            valueLabel.text = currentValue.description
        }
    }

   // inside i set currentValue = 3
}
Run Code Online (Sandbox Code Playgroud)

但customView.rx.value不会发出任何值

ios swift rx-swift rx-cocoa

3
推荐指数
1
解决办法
1189
查看次数

RxTableViewSectionedReloadDataSource

这是 RxSwift 中的 tableView 我无法配置数据源。RxTableViewSectionedReloadDataSource 似乎缺少参数,尽管这很奇怪,因为我遵循官方文档的完全相同的代码源

Xcode 错误 每当我按回车键自动完成关闭。关闭保持空白。

自动完成无效 我真的不知道如何解决这个问题

  let dataSource = RxTableViewSectionedReloadDataSource<SectionModel>() 



dataSource?.configureCell = { (ds: RxTableViewSectionedReloadDataSource<SectionOfCustomData>, tv: UITableView, ip: IndexPath, item: Article) -> NewsFeedCell in
                let cell = tv.dequeueReusableCell(withIdentifier: "Cell", for: ip) as! NewsFeedCell
                cell.configure(news: item)
                return cell
            }
            dataSource?.titleForHeaderInSection = { ds, index in
                return ds.sectionModels[index].header
            }

    let sections = [
        SectionOfCustomData(header: "First section", items: self.articles),
        SectionOfCustomData(header: "Second section", items: self.articles)
        ]

            guard let dtSource = dataSource else {
                return
            }
            Observable.just(sections)
                .bind(to: …
Run Code Online (Sandbox Code Playgroud)

swift rx-swift rxdatasources

3
推荐指数
1
解决办法
5540
查看次数

Objective-C循环到Swift 3

将Objective-C for-loop转换为Swift 3的最好和最干净的方法是什么?什么是最佳做法?我应该使用while循环吗?

NSInteger pageHeight = 792;
NSInteger pageWidth = 612;

for (int page=0; pageHeight * page < scrollView.frame.size.height; page++) {
    // execute some code
}
Run Code Online (Sandbox Code Playgroud)

我尝试过这样的事情

for i in pageHeight * i < scrollView.frame.size.height {
    // execute some code
}
Run Code Online (Sandbox Code Playgroud)

但我无法重复使用变量i,因为它无法使用.编译器给出错误:未解析的标识符'i'.

编辑:我问这个问题的原因之一是因为我想明确知道最佳实践是什么,并避免在循环代码之前创建一个额外的变量.

for-loop objective-c swift

1
推荐指数
1
解决办法
305
查看次数

RxSwift,RxCocoa和UITableview

我使用RxSwift实现UITableView时遇到问题.

我尝试使用以下代码将一个模型数组的observable绑定到表项. models.bind(to: self.tableView.rx.items(cellIdentifier: "Cell", cellType: ModelTableViewCell.self.

但是当我这样做时,它给了我以下错误:Type 'inout UITableView' does not conform to protocol 'ReactiveCompatible'我知道错误是不对的,因为NSObject扩展了ReactiveCompatible,所以UITableView也可以.另外,我的项目代码与RxSwiftCommunity上显示的示例并没有太大的不同

我创建了一个有错误的小示例项目.

[显示错误(图片)的示例代码]

uitableview ios swift rx-swift

1
推荐指数
1
解决办法
2104
查看次数

电子邮件验证器 RxSwift?

我正在使用 RxSwift

pod 'RxSwift',    '~> 4.0'
pod 'RxCocoa',    '~> 4.0'
Run Code Online (Sandbox Code Playgroud)

我看到了用户名、密码验证的例子,因为它的工作原理是

 func validateUsername(_ username: String) -> Observable<ValidationResult> {
        if username.isEmpty {
            return .just(.empty)
        }


        // this obviously won't be
        if username.rangeOfCharacter(from: CharacterSet.alphanumerics.inverted) != nil {
            return .just(.failed(message: "Username can only contain numbers or digits"))
        }

        // this obviously won't be
        if username.rangeOfCharacter(from: CharacterSet.alphanumerics.inverted) != nil {
            return .just(.failed(message: "Username can only contain numbers or digits"))
        }

        let loadingValue = ValidationResult.validating

        return API
            .usernameAvailable(username)
            .map { available in
                if available { …
Run Code Online (Sandbox Code Playgroud)

validation email-validation swift rx-swift

1
推荐指数
1
解决办法
1322
查看次数