i have 4 textfield
s , each takes 1 character, similar lock screen. can input , move 1 textfield
next textfield
.
problem when want delete , move previous textfield
, don't know when delete button clicked.
i'm using:
func textfield(textfield: uitextfield, shouldchangecharactersinrange range: nsrange, replacementstring string: string) -> bool
to input , move 1 textfield
another.
how know when delete key pressed?
following istvan answer, need post notification when deletebackward pressed:
class digitfield: uitextfield { override func deletebackward() { super.deletebackward() nsnotificationcenter.defaultcenter().postnotificationname("deletepressed", object: nil) } }
then inside viewdidload() add observer follow:
nsnotificationcenter.defaultcenter().addobserver(self, selector: "goprevious", name: "deletepressed", object: nil)
and method:
func goprevious() { if seconddigit.isfirstresponder() { seconddigit.enabled = false firstdigit.enabled = true firstdigit.becomefirstresponder() } else if thirddigit.isfirstresponder() { thirddigit.enabled = false seconddigit.enabled = true seconddigit.becomefirstresponder() } else if fourthdigit.isfirstresponder() { fourthdigit.enabled = false thirddigit.enabled = true thirddigit.becomefirstresponder() } }
select text field , connect digitfield
you need connect each text field ibaction (using sent events editing changed)
the view controller code should this:
import uikit class viewcontroller: uiviewcontroller { @iboutlet weak var firstdigit: uitextfield! @iboutlet weak var seconddigit: uitextfield! @iboutlet weak var thirddigit: uitextfield! @iboutlet weak var fourthdigit: uitextfield! override func viewdidload() { super.viewdidload() nsnotificationcenter.defaultcenter().addobserver(self, selector: "goprevious", name: "deletepressed", object: nil) firstdigit.securetextentry = true seconddigit.securetextentry = true thirddigit.securetextentry = true fourthdigit.securetextentry = true firstdigit.keyboardtype = .decimalpad seconddigit.keyboardtype = .decimalpad thirddigit.keyboardtype = .decimalpad fourthdigit.keyboardtype = .decimalpad firstdigit.becomefirstresponder() seconddigit.enabled = false thirddigit.enabled = false fourthdigit.enabled = false } override func didreceivememorywarning() { super.didreceivememorywarning() // dispose of resources can recreated. } func goprevious() { if seconddigit.isfirstresponder() { seconddigit.enabled = false firstdigit.enabled = true firstdigit.becomefirstresponder() } else if thirddigit.isfirstresponder() { thirddigit.enabled = false seconddigit.enabled = true seconddigit.becomefirstresponder() } else if fourthdigit.isfirstresponder() { fourthdigit.enabled = false thirddigit.enabled = true thirddigit.becomefirstresponder() } } // need connect each text field ibaction (using sent events editing changed) – @ibaction func firstchanged(sender: uitextfield) { if let digitone = sender.text.toint() { println(digitone) sender.enabled = false seconddigit.enabled = true seconddigit.becomefirstresponder() } else { sender.text = "" } } @ibaction func secondchanged(sender: uitextfield) { if let digittwo = sender.text.toint() { println(digittwo) sender.enabled = false thirddigit.enabled = true thirddigit.becomefirstresponder() } else { sender.text = "" } } @ibaction func thirdchanged(sender: uitextfield) { if let digitthree = sender.text.toint() { println(digitthree) sender.enabled = false fourthdigit.enabled = true fourthdigit.becomefirstresponder() } else { sender.text = "" } } @ibaction func fourthchanged(sender: uitextfield) { if let digitfour = sender.text.toint() { println(digitfour) sender.enabled = false } else { sender.text = "" } } }