Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to disable pasting in a TextField in Swift?

I've got a TextField with a numberPad and the function runs only if it contains numbers.

The user will crash the app if they paste letters in the TextField and click OK.

How can I disable pasting in the TextField?

like image 636
Eliko Avatar asked Apr 12 '15 23:04

Eliko


People also ask

How do I disable paste option in TextField in flutter?

On TextformField, we can use the toolbarOptions property to enable and disable the selected option. If we don't set any value on toolbarOptions, selectAll and paste will be enabled by default. If obscureText is true, copy and cut will be disabled. If readOnly is true, paste and cut will be disabled.

How do I add padding to TextField?

A JTextField class will generate an ActionListener interface when we trying to enter some input inside it. The important methods of a JTextField class are setText(), getText(), setBorder(), setEnabled(), etc. We can add padding to a JTextField using the setMargin(Insets s) of JTextComponent class.

What is TextField in Swift?

A TextField is a type of control that shows an editable text interface. In SwiftUI, a TextField typically requires a placeholder text which acts similar to a hint, and a State variable that will accept the input from the user (which is usually a Text value).


1 Answers

I agree with Leonardo Savio Dabus, if I were you I'd use string checking and just give out a warning, it makes things easier. BUT, if disabling paste option is a fancy feature you really want to put into your app, then you need to do more work. I'll provide the steps below.

Step 1: You need to create another class which extends the UITextField. In this example, I made my CustomUITextField.

import Foundation import UIKit  //Don't forget this  class CustomUITextField: UITextField {    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {         if action == #selector(UIResponderStandardEditActions.paste(_:)) {             return false         }         return super.canPerformAction(action, withSender: sender)    } } 

Step 2: Wire the storyboard with your ViewController. You need to declare an IBOutlet as in normal case:

@IBOutlet var textFieldA: CustomUITextField? 

Wire the circle next to the @IBOutlet to the TextField in the storyboard. THEN, this is important and easy to be ignored:

  • Go to your storyboard
  • Click the target TextField
  • Select Identity Inspector (the 3rd one)
  • Change the class to CustomUITextField

Quick snapshot is provided below.

enter image description here

That's it, hope this works.

Credit:

Main reference

If you want to know more about the behavior of canPerformAction method, though it's an Objective-C version, the concepts are shared here.

like image 192
TimeString Avatar answered Sep 29 '22 05:09

TimeString