自定义UI控件:输入框输入时,不得以空格开头

1. 扩展String

import Foundation

extension String {

	// 先頭のスペースをトリムする
	func trimLeftSpace(cursorPosition:inout Int) -> String {
		
		var start = 0
    	while start < self.count && (self[start] == " " || self[start] == " ") {
        	start += 1
    	}
    
    	guard start < self.count else {
        	return ""
    	}
    
    	let str = String(self[self.index(self.startIndex, offsetBy: start)..<self.index(self.startIndex, offsetBy: self.count)])
    	// カーソル位置を設定
    	cursorPosition = cursorPosition - start
    
    	return  str
	}
  
}

2. 自定义UI控件

import Foundation
import UIKit

class TrimSpace: UITextField {
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        setupField()
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        
        setupField()
    }
    
    private func setupField() {
        // 数字キーボードのタイプを設定
        self.keyboardType = .default
        
        //テキストフィールド値変更の監視
        self.addTarget(self, action: #selector(leftSpaceDeleteFormat), for: .editingChanged)
    }
    
    // テキストフォーマット
    @objc func leftSpaceDeleteFormat(_ textField: UITextField) {
        
        if textField.markedTextRange == nil {
            
            // 現在のカーソル位置
            var cursorPostion = self.offset(from: self.beginningOfDocument,
                                            to: self.selectedTextRange!.start)
            
            // 先頭のスペースをトリムする
            self.text = self.text!.trimLeftSpace(cursorPosition: &cursorPostion)
            
            // カーソル位置を設定
            let targetPostion = self.position(from: self.beginningOfDocument,
                                              offset: cursorPostion)!
            self.selectedTextRange = self.textRange(from: targetPostion,
                                                to: targetPostion)
        }
    }
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值