私は自分のアプリケーションでuitextフィールドを実装し、何かをトリガするボタンになるように右のビューを設定しています。uitextField.rightViewの編集機能を無効にする方法。
しかし、私はuitextフィールドのrightViewを押すたびに、それはまた、編集を開始する(キーボードが表示されます)アプリを起動します。
uitextFieldのrightViewを押したときの編集を無効にするにはどうすればよいですか?
ありがとうございました。
私は自分のアプリケーションでuitextフィールドを実装し、何かをトリガするボタンになるように右のビューを設定しています。uitextField.rightViewの編集機能を無効にする方法。
しかし、私はuitextフィールドのrightViewを押すたびに、それはまた、編集を開始する(キーボードが表示されます)アプリを起動します。
uitextFieldのrightViewを押したときの編集を無効にするにはどうすればよいですか?
ありがとうございました。
使用このカスタムサブクラス:
@IBDesignable class TJTextField: UITextField {
fileprivate var ImgIcon: UIImageView?
@IBInspectable var errorEntry: Bool = false {
didSet {
self.setNeedsDisplay()
}
}
@IBInspectable var leftTextPedding: Int = 0 {
didSet {
self.setNeedsDisplay()
}
}
@IBInspectable var lineColor: UIColor = UIColor.black {
didSet {
self.setNeedsDisplay()
}
}
@IBInspectable var placeHolerColor: UIColor = UIColor(red: 199.0/255.0, green: 199.0/255.0, blue: 205.0/255.0, alpha: 1.0) {
didSet {
self.setNeedsDisplay()
}
}
@IBInspectable var errorColor: UIColor = UIColor.red {
didSet {
self.setNeedsDisplay()
}
}
@IBInspectable var imageWidth: Int = 0 {
didSet {
self.setNeedsDisplay()
}
}
@IBInspectable var txtImage : UIImage? {
didSet {
self.setNeedsDisplay()
}
}
override func textRect(forBounds bounds: CGRect) -> CGRect {
return self.newBounds(bounds)
}
override func editingRect(forBounds bounds: CGRect) -> CGRect {
return self.newBounds(bounds)
}
fileprivate func newBounds(_ bounds: CGRect) -> CGRect {
var newBounds = bounds
newBounds.origin.x += CGFloat(leftTextPedding) + CGFloat(imageWidth)
return newBounds
}
var errorMessage: String?
override func awakeFromNib() {
super.awakeFromNib()
//setting left image
if (txtImage != nil)
{
let btnLeft = UIButton()
btnLeft.frame = CGRect(x: 0, y: 0, width: CGFloat(imageWidth), height: self.frame.height)
btnLeft.setImage(txtImage, for: .normal)
self.leftViewMode = UITextFieldViewMode.always
self.leftView = btnLeft
btnLeft.addTarget(self, action: #selector(TJTextField.btnClicked), for: .touchUpInside)
}
}
func btnClicked()
{
if !self.isEditing
{
self.resignFirstResponder()
}
}
override func draw(_ rect: CGRect)
{
let height = self.bounds.height
// get the current drawing context
let context = UIGraphicsGetCurrentContext()
// set the line color and width
if errorEntry {
context?.setStrokeColor(errorColor.cgColor)
context?.setLineWidth(1.5)
} else {
context?.setStrokeColor(lineColor.cgColor)
context?.setLineWidth(0.5)
}
// start a new Path
context?.beginPath()
context!.move(to: CGPoint(x: self.bounds.origin.x, y: height - 0.5))
context!.addLine(to: CGPoint(x: self.bounds.size.width, y: height - 0.5))
// close and stroke (draw) it
context?.closePath()
context?.strokePath()
//Setting custom placeholder color
if let strPlaceHolder: String = self.placeholder
{
self.attributedPlaceholder = NSAttributedString(string:strPlaceHolder,
attributes:[NSForegroundColorAttributeName:placeHolerColor])
}
}
override func leftViewRect(forBounds bounds: CGRect) -> CGRect
{
return CGRect(x: 0, y: 0, width: CGFloat(imageWidth), height: self.frame.height)
}
}
なぜIBDEsignableとIBInspectableをここに配置する必要がありますか? –
@TejaNandamuri UIButton、IBDEsignable、IBInspectableのサブクラスは、storybordでライブレンダリングします。 –
@TejaNandamuri TJTextfieldをボタンのスーパークラスとして設定するだけで、すべての作業が完了します。 –
はあなたのスーパービューにテキストフィールドを追加した後、あなたのボタンの表示を追加してください。その場合、テキストフィールドとオーバーラップしてタップジェスチャを傍受します。
または、制約を特定の幅または左ボタン側に設定するだけでもかまいません。
右ボタンの内側にこの行を書く[self.view endEditing:YES]; –
あなたの試したコードを表示 –