RxSwift控件的基本使用

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


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

//第一种实现方式
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)

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)

4、可以将按钮点击的时候和一些我们需要进行的操作给绑定到一起

button.rx.tap
            .bind {
                self.buttonLabel.text! += "点击"
                self.view.endEditing(true)
                //这里就会用动画效果了
                UIView.animate(withDuration: 0.3) {
                    self.view.layoutIfNeeded()
                }
            }
            .disposed(by: disposeBag)
        

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)
效果图

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

 slider.rx.value
            .bind(to: progressView.rx.progress)
            .disposed(by: disposeBag)

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
    }()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值