• Swift


    1,问题描述
    有时我们开发的时候需要先把“确认”按钮初始设置为不可用,当文本框中输入文字以后,再将输入按钮变为可用。

    2,实现原理
    (1)要检测文本框内容的变化,我们需要让新界面的Controller遵循一个文本协议UITextFieldDelegate。
    同时在viewDidLoad方法内将文本框的代理设置为MainListController当前实例。
    然后实现textFile的shouldChangeCharactersInRange方法就能在文本框将要变化的时候执行一些代码。
     
    (2)但这个只是将要变化时执行,而不是变化后。比如在这个方法内打印出文本框的内容,会发现每当我们改变文本框的内容时,打印出来的是上一次的内容。
    比如先输入1,打印出来是空。再输入2,文本框上是12,但打印出来却是1.
    要获取最新内容,则需要String的stringByReplacingCharactersInRange方法,但这个方法在Swift的String中又不支持。要解决这个问题,就要先替NSRange做个扩展。

    3,代码如下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    import UIKit
     
    class ViewController: UIViewController ,UITextFieldDelegate{
     
        @IBOutlet weak var button: UIButton!
        @IBOutlet weak var textField: UITextField!
         
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
             
            textField.delegate = self
        }
     
        func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange,
            replacementString string: String) -> Bool {
            let newText = textField.text
                .stringByReplacingCharactersInRange(range.toRange(textField.text), withString: string)
            button.enabled = countElements(newText) > 0
            return true
        }
         
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    }
     
    //扩展NSRange,让swift的string能使用stringByReplacingCharactersInRange
    extension NSRange {
        func toRange(string: String) -> Range<String.Index> {
            let startIndex = advance(string.startIndex, self.location)
            let endIndex = advance(startIndex, self.length)
            return startIndex..<endIndex
        }
    }
  • 相关阅读:
    cf B. Vasily the Bear and Fly
    hdu 3339 In Action
    hdu 六度分离
    cf A. Vasily the Bear and Triangle
    cf C. Secrets
    2.19学习笔记|2.20学习笔记
    VAE代码学习
    2.9日学习记录
    deconvolution反卷积(待学习)
    gamma分布学习
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4841061.html
Copyright © 2020-2023  润新知