RxSwift控件的基本使用

1、我们如果想实现,点击view就可以让view中的文本框停止编辑的话,我们可以这么做在Storyboard中拖拽一个手势出来,然后在Referencing Outlets Collection中要去和view去关联器来。

RxSwift控件的基本使用_第1张图片

然后我们在代码中就可以直接进行写了

//第一种实现方式
tapGestureRecognizer.rx.event
            .subscribe(onNext: { [unowned self] _ in
                self.view.endEditing(true)
            }).disposed(by: disposeBag)

//第二种实现方式
tapGestureRecognizer.rx.event.bind { [unowned self] _ in
                self.view.endEditing(true)
            }
            .disposed(by: disposeBag)
2、把label和textField进行绑定

textField.rx.text
            .bind(to: textFieldLabel.rx.text)
            .disposed(by: disposeBag)
RxSwift控件的基本使用_第2张图片
3、计算文本框内内容的字数

textView.rx.text.asDriver()
            .map {
                "Character count: \($0!.count)"
            }
            .drive(textViewLabel.rx.text)
            .disposed(by: disposeBag)
//我们当然还可以这样,加一个orEmpty就可以不用强行解包了
textView.rx.text.orEmpty.asDriver()
            .map {
                "count: \($0.count)"
            }
            .drive(textViewLabel.rx.text)
            .disposed(by: disposeBag)
RxSwift控件的基本使用_第3张图片
4、可以将按钮点击的时候和一些我们需要进行的操作给绑定到一起

button.rx.tap
            .bind {
                self.buttonLabel.text! += "点击"
                self.view.endEditing(true)
                //这里就会用动画效果了
                UIView.animate(withDuration: 0.3) {
                    self.view.layoutIfNeeded()
                }
            }
            .disposed(by: disposeBag)
        
RxSwift控件的基本使用_第4张图片
5、UIStepper的value绑定到label上面

stepper.rx.value
            .map { String($0) }
            .bind(to: stepperLabel.rx.text)
            .disposed(by: disposeBag)

6、绑定 segmentedControl的selectIndex,这里的value其实就是selectIndex,然后skip(1)是跳过响应的设置segmentedControlLabel的text第一个设置为-1的步骤

 segmentedControl.rx.value
            .skip(1)
            .bind { [unowned self] in
                self.segmentedControlLabel.text = "Selected\($0)"
                
                UIView.animate(withDuration: 0.3) {
                    self.view.layoutIfNeeded()
                }
            }
            .disposed(by: disposeBag)
效果图

RxSwift控件的基本使用_第5张图片

7、根据UISlider的变化来改变进度条的值

 slider.rx.value
            .bind(to: progressView.rx.progress)
            .disposed(by: disposeBag)
RxSwift控件的基本使用_第6张图片
8、利用开关是控制网络指示器的隐藏和显示和转动还是不转动

  switch.rx.value
            .map { !$0 }
            .bind(to: activityIndicator.rx.isHidden)
            .disposed(by: disposeBag)
  switch.rx.value.asDriver()
            .drive(activityIndicator.rx.isAnimating)
            .disposed(by: disposeBag)

9、将日期选择器里面的日期给拿给label

 datePicker.rx.date
            .map { [unowned self] in
                "date: " + self.dateFormatter.string(from: $0)
            }
            .bind(to: datePickerLabel.rx.text)
            .disposed(by: disposeBag)
以及我们设置的日期格式器,NSDateFormatter是自带了几种格式,所以我们下面的就是去设置这些自带的格式

lazy var dateFormatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateStyle = .medium
        formatter.timeStyle = .short
        return formatter
    }()

你可能感兴趣的:(RxSwift)