UITextField — vad är det, konfiguration av inmatningsfält och arbetsprincip

Författare: IT Sectr Publicerad: 2026-07-06 Lästid: 8 min

UITextField — är en standard UIKit-komponent för textinmatning på en rad i iOS, som ärver UIControl och stöder ett brett spektrum av tangentbordslägen. Enligt Apple Developer (2025)-dokumentationen tillhandahåller UITextField delegaten UITextFieldDelegate med callbacks shouldBeginEditing, shouldChangeCharactersInRange och shouldReturn. Till skillnad från UITextView begränsar UITextField inmatning till en rad och stöder secureTextEntry, leftView och rightView för anpassade kontroller. Detta är huvudelementet för inloggnings-, sök-, registrerings- och datainmatningsformulär i iOS-appar.

Huvudpunkter

  • UITextField — enradigt textinmatningsfält i UIKit med stöd för delegat och anpassade tangentbord
  • UIKeyboardType — 12 tangentbordstyper: numberPad, emailAddress, URL, phonePad med flera
  • UITextFieldDelegate — hantering av inmatningens livscykel via shouldBegin/End/Change-callbacks
  • Secure Text Entry — lösenordsinmatningsläge med ersättning av tecken med punkter via isSecureTextEntry
  • Left/Right View — anpassade ikoner och knappar inuti inmatningsfältet för UX-förbättringar

Vad är UITextField

UITextField — är en klass i UIKit-ramverket avsedd för enradig textinmatning av användaren. Klassen ärver UIControl, vilket möjliggör prenumeration på inmatningshändelser via target-action-mekanismen: addTarget(self, action: Selector("textChanged:"), for: editingChanged). UITextField visar ram (borderStyle), platshållartext när fältet är tomt, rensningsknapp (clearButtonMode) och kan innehålla vänster/höger hjälpvyer. Fältet visar/döljer automatiskt tangentbordet vid mottagning/förlust av fokus via becomeFirstResponder och resignFirstResponder. Fältets storlek bestäms av intrinsicContentSize baserat på teckensnitt och border style. För att skapa UITextField i Interface Builder (Storyboard/XIB) används Object Library, programmatiskt — via initieraren UITextField(frame: CGRect). Klassen är fullt kompatibel med modern iOS-arkitektur: Combine publishers, @Published i SwiftUI via UIViewRepresentable och Diffable Data Source för formulär.

Tangentbordstyper UIKeyboardType

UITextField stöder 12 tangentbordstyper via egenskapen keyboardType. Varje typ optimerar teckenuppsättningen för ett specifikt inmatningsscenario. UIKeyboardType.default — standard QWERTY-tangentbord. UIKeyboardType.numberPad — endast siffror utan extra tecken (idealisk för PIN-koder och telefonnummer). UIKeyboardType.emailAddress — tangentbord med @-tecken och punkt på huvudlagret. UIKeyboardType.URL — tangentbord med .com, / och . på huvudlagret. UIKeyboardType.phonePad — numeriskt tangentbord med +, *, # för inmatning av telefonnummer. UIKeyboardType.decimalPad — siffror med decimalpunkt för inmatning av priser. UIKeyboardType.webSearch — tangentbord med Go-knapp och optimering för sökfrågor. UIKeyboardType.asciiCapable — endast ASCII-tecken för latinska alfabetet. Tangentbordet visas vid anrop av becomeFirstResponder och döljs vid resignFirstResponder. Tangentbordstypen kan ändras dynamiskt under redigering.

TypScenarioFunktioner
defaultAllmän textinmatningStandard QWERTY
numberPadPIN, kodEndast siffror 0-9
emailAddressE-post@ och . på huvudlagret
URLWebbadress.com, /, . på huvudlagret
phonePadTelefonSiffror, +, *, #
decimalPadPris, talSiffror + decimalpunkt

Delegaten UITextFieldDelegate och dess metoder

UITextFieldDelegate — är ett protokoll som definierar textfältets beteende i olika faser av inmatning. Huvudmetoder: textFieldShouldBeginEditing(textField) — returnerar Bool, som tillåter eller förbjuder att påbörja redigering; textFieldDidBeginEditing — anropas efter att tangentbordet visas; textFieldShouldEndEditing — kontrollerar om redigering kan avslutas (vid false förlorar fältet inte fokus); textFieldDidEndEditing — anropas efter att tangentbordet dolts; textFieldShouldChangeCharactersInRange — anropas vid varje teckeninmatning, möjliggör filtrering av inmatning (endast ett tecken tillåtet, om false returneras läggs tecknet inte till); textFieldShouldReturn — anropas vid tryck på Return/Go/Next/Search, används för att gå till nästa fält. Delegaten är inte Optional: alla metoder har standardimplementering, men för anpassat beteende måste motsvarande metod överskrivas.

Fokushantering via shouldReturn

Metoden shouldReturn — standardmönster för navigering mellan formulärfält. Implementering: textFieldShouldReturn(textField) — vi kontrollerar vilket textField som utlöste händelsen och flyttar fokus till nästa fält via becomeFirstResponder(). Om detta är det sista fältet — anropar vi resignFirstResponder() för att dölja tangentbordet. För att lagra referenser till fält, använd IBOutlet collection eller separata IBOutlet för varje fält.

Secure Text Entry och anpassade left/right view

isSecureTextEntry — egenskap hos UITextField som vid true ersätter inmatade tecken med punkter (•) och blockerar kopiering av text via UIMenuController. Används för lösenords-, PIN- och CVV-fält. Vid växling mellan säkert läge och vanlig text (show/hide password) ställ in textField.isSecureTextEntry.toggle(). Viktigt: vid ändring av isSecureTextEntry återställs fältets text — spara den i förväg. LeftView och RightView — är anpassade UIView som visas inuti inmatningsfältet till vänster eller höger. Typisk användning: sökikon i leftView, knappen "Rensa" i rightView. Konfiguration: textField.leftViewMode = always (alltid) eller whileEditing (endast vid redigering). Left/right view positioneras automatiskt inuti textfältet med hänsyn till padding. Viewens storlek bestäms av bounds eller Auto Layout.

swift
import UIKit

class LoginViewController: UIViewController {
    let passwordField = UITextField()

    override func viewDidLoad() {
        super.viewDidLoad()
        passwordField.isSecureTextEntry = true
        passwordField.placeholder = "Password"
        passwordField.keyboardType = .asciiCapable
        passwordField.delegate = self

        // Anpassad knapp för att visa/dölja lösenord
        let showButton = UIButton(type: .system)
        showButton.setTitle("Visa", for: .normal)
        showButton.addTarget(self, action: #selector(togglePasswordVisibility),
                       for: .touchUpInside)
        passwordField.rightView = showButton
        passwordField.rightViewMode = .always
    }

    @objc func togglePasswordVisibility() {
        passwordField.isSecureTextEntry.toggle()
    }
}

Konfiguration av UITextInputTraits

UITextInputTraits — är ett protokoll som definierar visuell och beteendemässig anpassning av tangentbordet för UITextField. Huvudegenskaper: autocorrectionType (.default, .no, .yes) — aktiverar eller avaktiverar automatisk korrigering av text; autocapitalizationType (.none, .words, .sentences, .allCharacters) — automatisk Caps Lock för första tecknet; spellCheckingType — stavningskontroll; returnKeyType (.done, .go, .next, .search, .send, .continue, .join, .route, .emergencyCall) — text på Return-knappen på tangentbordet; enablesReturnKeyAutomatically — automatisk blockering av Return-knappen när fältet är tomt. För namninmatningsfält använd autocapitalizationType = .words, för e-post — autocorrectionType = .no, för URL — keyboardType = .URL + autocapitalizationType = .none. Konfiguration av traits utförs efter initiering av fältet före dess visning. Ändring av traits uppdaterar dynamiskt tangentbordet vid nästa visning.

Return Key Type och navigering i formulär

Return Key Type bestämmer texten på knappen på tangentbordet: Next — gå till nästa fält, Done — avsluta inmatning, Search — starta sökning, Send — skicka formulär, Continue — fortsätt ifyllning. I kombination med delegatmetoden shouldReturn möjliggör returnKeyType att skapa en naturlig UX: användaren fyller i fält, trycker på Next för att gå till nästa och Done för att skicka på det sista fältet. För anpassning av knapptext, använd UIButtonConfiguration i iOS 15+.

Placeholder, formatering och inmatningsmask

Placeholder UITextField — är texten som visas i grått när fältet är tomt. Konfiguration: textField.placeholder = "Enter email". För anpassning av färg och teckensnitt på placeholder, använd attributedPlaceholder med NSAttributedString. Inmatningsmask implementeras via delegatmetoden shouldChangeCharactersInRange — format för telefonnummer, datum, kreditkort, SNILS stöds. Inmatningsmasken möjliggör separation av visning och värde: användaren ser formaterad text (t.ex. +7 (999) 999-99-99), medan modellen lagrar "79999999999". Implementeringsexempel: vi lagrar masken som en sträng med X-symboler för ersättning; vid varje inmatning skapar vi en formaterad sträng och returnerar false i shouldChangeCharactersInRange, ersätter fältets text via textField.text = formattedText. För siffror, använd NumberFormatter och decimal keyboardType.

swift
extension LoginViewController: UITextFieldDelegate {
    func textFieldShouldReturn(
        textField: UITextField
    ) -> Bool {
        if textField == emailField {
            passwordField.becomeFirstResponder()
        } else if textField == passwordField {
            textField.resignFirstResponder()
            loginTapped()
        }
        return true
    }

    func textField(
        textField: UITextField,
        shouldChangeCharactersIn range: NSRange,
        replacementString string: String
    ) -> Bool {
        // Blockera mellanslag i e-post
        if textField == emailField && string == " " {
            return false
        }
        // Lösenordslängdsgräns
        if textField == passwordField {
            let newLength = (textField.text?.count ?? 0) +
                string.count - range.length
            return newLength <= 32
        }
        return true
    }
}

Kodexempel: validering och formulär

Låt oss titta på ett komplett exempel på implementering av ett inloggningsformulär med UITextField, e-postvalidering och visuell återkoppling. Formuläret innehåller två fält: emailField (emailAddress-tangentbord, ingen automatisk korrigering) och passwordField (secureTextEntry). Validering utförs i shouldChangeCharactersInRange och ytterligare vid tryck på Login-knappen. För visuell återkoppling: röd ram (layer.borderColor) vid fel, grön — vid framgångsrik validering. Återställning av ramen vid påbörjad redigering i textFieldDidBeginEditing.

E-postvalidering med reguljärt uttryck

E-postvalidering utförs via NSPredicate med formatet "SELF MATCHES %@" och ett reguljärt uttryck för grundläggande formatkontroll. Den faktiska kontrollen av e-postens existens bör utföras på servern. För avancerad validering, använd biblioteket SwiftValidators eller Combine publishers. Exempel: NSPredicate(format: "SELF MATCHES [c] %@", emailRegex).evaluate(with: email). Fältets ram uppdateras via animation block för smidig övergång.

swift
func validateEmail(textField: UITextField) {
    guard let text = textField.text, !text.isEmpty else {
        textField.layer.borderColor = UIColor.clear.cgColor
        return
    }

    let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.\\p{L}{2,}"
    let predicate = NSPredicate(format: "SELF MATCHES [c] %@", emailRegex)
    let isValid = predicate.evaluate(with: text)

    UIView.animate(withDuration: 0.2) {
        textField.layer.borderColor = isValid
            ? UIColor.systemGreen.cgColor
            : UIColor.systemRed.cgColor
        textField.layer.borderWidth = 1.0
        textField.layer.cornerRadius = 6.0
    }
}

Vanliga frågor

Hur begränsar man antalet tecken i UITextField?

Använd delegatmetoden shouldChangeCharactersInRange. Beräkna den nya textlängden som existingText.count + newText.count - range.length och returnera false om gränsen har överskridits. Alternativt: prenumerera på händelsen editingChanged via addTarget och trunkera texten via textField.text = String(text.prefix(maxLength)).

Varför reagerar inte UITextField på beröring?

Kontrollera: isUserInteractionEnabled = true (standard), delegaten returnerar inte false i shouldBeginEditing. Om fältet är inuti UIScrollView — inaktivera delaysContentTouches. Om fältet är i en modal kontroller — kontrollera att den inte blockerar beröringar. För SwiftUI UIViewRepresentable kontrollera att fältet korrekt blir firstResponder via DispatchQueue.main.async.

Hur döljer man tangentbordet genom att trycka utanför UITextField?

Lägg till UITapGestureRecognizer på self.view eller scrollView med target-action som anropar view.endEditing(true). Alternativ: textField.resignFirstResponder() för att dölja tangentbordet för ett specifikt fält. Konfigurera touchesBegan i UIViewController eller använd biblioteket IQKeyboardManager för automatisk tangentbordshantering. Glöm inte att inaktivera cancelsTouchesInView för korrekt funktion av knappar.

Hur ändrar man textfärg och teckensnitt för UITextField?

Textfärg: textField.textColor = UIColor.label. Teckensnitt: textField.font = UIFont.systemFont(ofSize: 16, weight: .regular). Placeholderfärg: textField.attributedPlaceholder = NSAttributedString(string: "Email", attributes: [.foregroundColor: UIColor.secondaryLabel]).

Hur gör man UITextField skrivskyddad?

Tre sätt: isEnabled = false (ändrar utseende), isUserInteractionEnabled = false (behåller visuell stil) eller returnera false i textFieldShouldBeginEditing hos delegaten. Det tredje sättet är att föredra — det blockerar inmatning utan att ändra den visuella stilen. För programmatisk inställning av text i skrivskyddat läge, använd delegaten.

Sammanfattning

  • UITextField — enradigt textinmatningsfält i UIKit med arv från UIControl och hantering via delegat
  • UIKeyboardType — 12 tangentbordstyper för olika scenarier: e-post, URL, numberPad, phonePad
  • UITextFieldDelegate — protokoll med metoder shouldBegin/End/Change/Return för inmatningshantering
  • Secure Text Entry — lösenordsläge via isSecureTextEntry med ersättning av tecken med punkter
  • Left/Right View — anpassade element inuti fältet (ikoner, knappar) med always/whileEditing-lägen
  • Return Key Type — konfiguration av Return-knappen: Next, Done, Search, Send för formulärnavigering
  • Validering — via shouldChangeCharactersInRange med regex och visuell återkoppling via ram
  • Placeholder konfigureras via attributedPlaceholder med NSAttributedString för anpassad stil

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också