UITextField z bezpiecznym wpisem, zawsze jest czyszczone przed edycją

Mam dziwny problem, w którym mój UITextField, który przechowuje Bezpieczny wpis, jest zawsze czyszczony, gdy próbuję go edytować. Dodałem 3 znaki do pola, przechodzi do innego pola i wraca, kursor znajduje się na 4. pozycji znaku, ale gdy próbuję dodać inny znak, cały tekst w polu zostaje wyczyszczony przez nowy znak. Mam' Clears when editing begins ' niezaznaczone w stalówce. Więc w czym problem? Jeśli usunę zabezpieczony wpis, wszystko będzie działa dobrze, więc czy jest to właściwość bezpiecznych pól tekstowych? Czy jest jakiś sposób, aby zapobiec temu zachowaniu?

Author: Nithin, 2011-09-05

21 answers

Set,

textField.clearsOnBeginEditing = NO;

Uwaga: To nie zadziała, jeśli secureTextEntry = YES . wydaje się, że domyślnie iOS czyści tekst bezpiecznych pól tekstowych przed edycją, bez względu na to, clearsOnBeginEditing jest tak lub nie.

 41
Author: EmptyStack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-31 09:05:20

Jeśli nie chcesz, aby pole zostało wyczyszczone, nawet gdy secureTextEntry = YES, użyj:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSString *updatedString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    textField.text = updatedString;

    return NO;
}

Napotkałem podobny problem podczas dodawania funkcji wyświetlania / ukrywania tekstu hasła do widoku rejestracji.

 38
Author: Eric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-08 17:24:19

@Eric ' s answer działa, ale miałem z tym dwa problemy.

  1. Jak zauważył @ malex, każda zmiana tekstu w środku spowoduje umieszczenie karetki na końcu tekstu.
  2. używam rac_textSignal z ReactiveCocoa i zmiana tekstu bezpośrednio nie wywołałaby sygnału.

Mój ostatni kod

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    //Setting the new text.
    NSString *updatedString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    textField.text = updatedString;

    //Setting the cursor at the right place
    NSRange selectedRange = NSMakeRange(range.location + string.length, 0);
    UITextPosition* from = [textField positionFromPosition:textField.beginningOfDocument offset:selectedRange.location];
    UITextPosition* to = [textField positionFromPosition:from offset:selectedRange.length];
    textField.selectedTextRange = [textField textRangeFromPosition:from toPosition:to];

    //Sending an action
    [textField sendActionsForControlEvents:UIControlEventEditingChanged];

    return NO;
}

Swift3 dodany przez @Mars:

  func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let nsString:NSString? = textField.text as NSString?
    let updatedString = nsString?.replacingCharacters(in:range, with:string);

    textField.text = updatedString;


    //Setting the cursor at the right place
    let selectedRange = NSMakeRange(range.location + string.length, 0)
    let from = textField.position(from: textField.beginningOfDocument, offset:selectedRange.location)
    let to = textField.position(from: from!, offset:selectedRange.length)
    textField.selectedTextRange = textField.textRange(from: from!, to: to!)

    //Sending an action
    textField.sendActions(for: UIControlEvents.editingChanged)

    return false;
}
 13
Author: Ahmad Baraka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-09 09:57:11

Jeśli używasz Swift 3 , wypróbuj tę podklasę.

class PasswordTextField: UITextField {

    override var isSecureTextEntry: Bool {
        didSet {
            if isFirstResponder {
                _ = becomeFirstResponder()
            }
        }
    }

    override func becomeFirstResponder() -> Bool {

        let success = super.becomeFirstResponder()
        if isSecureTextEntry, let text = self.text {
            self.text?.removeAll()
            insertText(text)
        }
        return success
    }

}

Dlaczego to działa?

TL;DR: jeśli edytujesz pole podczas przełączania isSecureTextEntry, Upewnij się, że wywołujesz becomeFirstResponder.


Przełączanie Wartości isSecureTextEntry działa poprawnie, dopóki użytkownik nie zmieni pola tekstowego - pole tekstowe zostanie wyczyszczone przed umieszczeniem nowych znaków. Ta wstępna Polana wydaje się mieć miejsce podczas becomeFirstResponder wywołania UITextField. Jeśli to wywołanie jest połączone z deleteBackward/insertText trick (jak wykazano w odpowiedziach @Aleksey i @dwsolberg), tekst wejściowy jest zachowany, pozornie anulując wstępne wyczyszczenie.

Jednak, gdy wartość isSecureTextEntry zmieni się, gdy pole tekstowe jest pierwszym odpowiedzialnym (np. użytkownik wpisuje swoje hasło, włącza przycisk "Pokaż hasło" tam iz powrotem, a następnie kontynuuje wpisywanie), pole tekstowe zostanie zresetowane jak zwykle.

Aby zachować tekst wejściowy w tym scenariuszu, ta podklasa uruchamia becomeFirstResponder tylko wtedy, gdy textfield był pierwszym odpowiedzialnym. Ten krok wydaje się brakować w innych odpowiedziach.

Dzięki @ Patrick Ridd za korektę!

 12
Author: Thomas Verbeek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-07 06:26:43

Miałem podobny problem. Mam pola tekstowe login (secureEntry = NO) i password (secureEntry = YES) osadzone w widoku tabeli. Próbowałem ustawić

textField.clearsOnBeginEditing = NO;

Wewnątrz obu odpowiednich metod delegowania (textFieldDidBeginEditing i textFieldShouldBeginEditing), które nie zadziałały. Po przejściu z pola hasła do pola logowania, całe pole logowania zostanie wyczyszczone, jeśli spróbuję usunąć pojedynczy znak. Użyłem textFieldShouldChangeCharactersInrange, aby rozwiązać mój problem, jak następuje:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (range.length == 1 && textField.text.length > 0) 
    {
        //reset text manually
        NSString *firstPart = [textField.text substringToIndex:range.location]; //current text minus one character
        NSString *secondPart = [textField.text substringFromIndex:range.location + 1]; //everything after cursor
        textField.text = [NSString stringWithFormat:@"%@%@", firstPart, secondPart];

        //reset cursor position, in case character was not deleted from end of 
        UITextRange *endRange = [textField selectedTextRange];
        UITextPosition *correctPosition = [textField positionFromPosition:endRange.start offset:range.location - textField.text.length];
        textField.selectedTextRange = [textField textRangeFromPosition:correctPosition toPosition:correctPosition];

        return NO;
    }
    else
    {
        return YES;
    }
}

Zakres.length = = 1 zwraca true, gdy użytkownik wchodzi do backspace, co jest (o dziwo) jedynym czasem, kiedy widzę wyczyszczone pole.

 5
Author: Ampers4nd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-23 00:42:33

Próbowałem wszystkich rozwiązań tu i ówdzie i w końcu przyszedł z tym nadrzędnym:

- (BOOL)becomeFirstResponder
{
    BOOL became = [super becomeFirstResponder];
    if (became) {
        NSString *originalText = [self text];
        //Triggers UITextField to clear text as first input
        [self deleteBackward];

        //Requires setting text via 'insertText' to fire all associated events
        [self setText:@""];
        [self insertText:originalText];
    }
    return became;
}

Uruchamia Wyczyść UITextField, a następnie przywraca oryginalny tekst.

 5
Author: Aleksey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-31 17:27:25

@Thomas Verbeek odpowiedź Bardzo mi pomogła:

class PasswordTextField: UITextField {

    override var isSecureTextEntry: Bool {
        didSet {
            if isFirstResponder {
                _ = becomeFirstResponder()
            }
        }
    }

    override func becomeFirstResponder() -> Bool {

        let success = super.becomeFirstResponder()
        if isSecureTextEntry, let text = self.text {
            deleteBackward()
            insertText(text)
        }
        return success
    }

}

Tylko, że znalazłem błąd w moim kodzie z nim. Po zaimplementowaniu jego kodu, jeśli masz tekst w polu textField i dotkniesz pola textField, usunie on tylko pierwszy znak, a następnie wstaw cały tekst ponownie. Zasadniczo wklejenie tekstu ponownie.

Aby temu zaradzić zastąpiłem deleteBackward() self.text?.removeAll() i zadziałało jak urok.

Nie doszedłbym tak daleko bez oryginalnego rozwiązania Thomasa, więc dzięki Thomas!
 3
Author: Patrick Ridd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-25 17:25:17

Bazując na rozwiązaniu Aleksieja, używam tej podklasy.

class SecureNonDeleteTextField: UITextField {

    override func becomeFirstResponder() -> Bool {
        guard super.becomeFirstResponder() else { return false }
        guard self.secureTextEntry == true else { return true }
        guard let existingText = self.text else { return true }
        self.deleteBackward() // triggers a delete of all text, does NOT call delegates
        self.insertText(existingText) // does NOT call delegates
        return true
    }
}

Zmiana zastąp znaków w zakresie nie działa dla mnie, ponieważ robię inne rzeczy z tym czasami, a dodanie więcej sprawia, że bardziej prawdopodobne jest, że będzie błędny.

To miłe, bo działa idealnie. Jedyną dziwnością jest to, że ostatni znak jest wyświetlany ponownie po ponownym dotknięciu pola. Podoba mi się to, ponieważ działa jako element zastępczy.
 2
Author: dwsolberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-31 17:08:03

Swift 3 / Swift 4

yourtextfield.clearsOnInsertion = false
yourtextfield.clearsOnBeginEditing = false

Uwaga: to nie zadziała, jeśli secureTextEntry = YES. Wydaje się, że domyślnie iOS czyści tekst bezpiecznych pól tekstowych przed edycją, bez względu na to, czy clearsOnBeginEditing jest tak czy nie.

Łatwy sposób użycia klasy i jej pracy 100%

class PasswordTextField: UITextField {

    override var isSecureTextEntry: Bool {
        didSet {
            if isFirstResponder {
                _ = becomeFirstResponder()
            }
        }
    }

    override func becomeFirstResponder() -> Bool {

        let success = super.becomeFirstResponder()
        if isSecureTextEntry, let text = self.text {
            self.text?.removeAll()
            insertText(text)
        }
         return success
    }

}
 2
Author: Shakeel Ahmed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-11 09:30:22

Jeśli chcesz użyć secureTextEntry = YES i właściwego zachowania wizualnego Do przewozu, potrzebujesz tego:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
{

    if (!string.length) {
        UITextPosition *start = [self positionFromPosition:self.beginningOfDocument offset:range.location];
        UITextPosition *end = [self positionFromPosition:start offset:range.length];
        UITextRange *textRange = [self textRangeFromPosition:start toPosition:end];
        [self replaceRange:textRange withText:string];
    }
    else {
       [self replaceRange:self.selectedTextRange withText:string];
    }

    return NO;
}
 1
Author: malex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-24 11:50:33

Po zabawie z solution od @ malex doszedłem do tej Swift wersji:

1) nie zapomnij zrobić kontrolera widoku UITextFieldDelegate:

class LoginViewController: UIViewController, UITextFieldDelegate {
...
}

override func viewDidLoad() {
   super.viewDidLoad()
   textfieldPassword.delegate = self
}

2) Użyj tego:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    if let start: UITextPosition = textField.positionFromPosition(textField.beginningOfDocument, offset: range.location),
       let end: UITextPosition = textField.positionFromPosition(start, offset: range.length),
       let textRange: UITextRange = textField.textRangeFromPosition(start, toPosition: end) {
           textField.replaceRange(textRange, withText: string)
    }
    return false
}

...a jeśli robisz to dla funkcji "Pokaż / Ukryj hasło" najprawdopodobniej będziesz musiał zapisać i przywrócić pozycję karetki po włączeniu/wyłączeniu secureTextEntry. Oto jak (zrobić to wewnątrz metody przełączania):

var startPosition: UITextPosition?
var endPosition: UITextPosition?

// Remember the place where cursor was placed before switching secureTextEntry
if let selectedRange = textfieldPassword.selectedTextRange {
   startPosition = selectedRange.start
   endPosition = selectedRange.end
}

...

// After secureTextEntry has been changed
if let start = startPosition {
   // Restoring cursor position
   textfieldPassword.selectedTextRange = textfieldPassword.textRangeFromPosition(start, toPosition: start)
   if let end = endPosition {
       // Restoring selection (if there was any)
       textfieldPassword.selectedTextRange = textfield_password.textRangeFromPosition(start, toPosition: end)
       }
}
 1
Author: Vitalii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-16 23:51:33

Rozwiązaliśmy to na podstawie odpowiedzi dwsolberga z dwoma poprawkami:

  • tekst hasła został zduplikowany podczas klikania w już skupione pole hasła
  • ostatni znak hasła został ujawniony po naciśnięciu pola hasła
  • deleteBackward i insertText powodują wywołanie zdarzenia ze zmianą wartości

Więc wymyśliliśmy to (Swift 2.3):

class PasswordTextField: UITextField {

    override func becomeFirstResponder() -> Bool {
        guard !isFirstResponder() else {
            return true
        }
        guard super.becomeFirstResponder() else {
            return false
        }
        guard secureTextEntry, let text = self.text where !text.isEmpty else {
            return true
        }

        self.text = ""
        self.text = text

        // make sure that last character is not revealed
        secureTextEntry = false
        secureTextEntry = true

        return true
    }
}
 1
Author: fluidsonic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:56

To jest kod swift z mojego projektu jest testowany i zajmuje się, backspace i Bezpieczne-wprowadzanie zmian false / true

/ / pobiera dane wejściowe użytkownika i wywołuje metody walidacji

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    if (textField == passwordTextFields) {

        let newString = (textField.text! as NSString).replacingCharacters(in: range, with: string)

        // prevent backspace clearing the password
        if (range.location > 0 && range.length == 1 && string.characters.count == 0) {
            // iOS is trying to delete the entire string
            textField.text = newString
            choosPaswwordPresenter.validatePasword(text: newString as String)

            return false
        }

        // prevent typing clearing the pass
        if range.location == textField.text?.characters.count {
            textField.text = newString
            choosPaswwordPresenter.validatePasword(text: newString as String)

            return false
        }

        choosPaswwordPresenter.validatePasword(text: newString as String)
    }

    return true
}
 1
Author: ovidiur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-08 13:53:04

Zdaję sobie sprawę, że jest to trochę stare, ale w iOS 6 UITextField " tekst "jest teraz domyślnie" przypisany " w Kreatorze interfejsów. Przełączenie tego na "zwykły", czyli tak było w iOS 5, rozwiązuje ten problem.

Również zamieścił tę samą odpowiedź na pytanie, które @ Craig linkował.

 0
Author: Matt S.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-04 00:03:18

Miałem ten sam problem, ale znalazłem rozwiązanie;

-(BOOL)textFieldShouldReturn:(UITextField *)textField
    {

        if(textField==self.m_passwordField)
        {
            text=self.m_passwordField.text;  
        }

        [textField resignFirstResponder];

        if(textField==self.m_passwordField)
        {
            self.m_passwordField.text=text;
        }
        return YES;
    }
 0
Author: Superdev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-08 08:32:44

Moim rozwiązaniem (dopóki błąd nie zostanie naprawiony) jest podklasowanie UITextField w taki sposób, aby dodało się do istniejącego tekstu zamiast czyścić jak wcześniej (lub jak w iOS 6). Próby zachowania oryginalnego zachowania, jeśli nie działa na iOS 7:

@interface ZTTextField : UITextField {
    BOOL _keyboardJustChanged;
}
@property (nonatomic) BOOL keyboardJustChanged;
@end

@implementation ZTTextField
@synthesize keyboardJustChanged = _keyboardJustChanged;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        _keyboardJustChanged = NO;
    }
    return self;
}

- (void)insertText:(NSString *)text {
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
    if (self.keyboardJustChanged == YES) {
        BOOL isIOS7 = NO;
        if ([[UIApplication sharedApplication] respondsToSelector:@selector(backgroundRefreshStatus)]) {
            isIOS7 = YES;
        }
        NSString *currentText = [self text];
        // only mess with editing in iOS 7 when the field is masked, wherein our problem lies
        if (isIOS7 == YES && self.secureTextEntry == YES && currentText != nil && [currentText length] > 0) {
            NSString *newText = [currentText stringByAppendingString: text];
            [super insertText: newText];
        } else {
            [super insertText:text];
        }
        // now that we've handled it, set back to NO
        self.keyboardJustChanged = NO;
    } else {
        [super insertText:text];
    }
#else
    [super insertText:text];
#endif
}

- (void)setKeyboardType:(UIKeyboardType)keyboardType {
    [super setKeyboardType:keyboardType];
    [self setKeyboardJustChanged:YES];
}

@end
 0
Author: Billy Gray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-07 19:37:27

Eksperymentowałem z odpowiedziami dwsolberg i fluidsonic i to chyba działa

override func becomeFirstResponder() -> Bool {

    guard !isFirstResponder else { return true }
    guard super.becomeFirstResponder() else { return false }
    guard self.isSecureTextEntry == true else { return true }
    guard let existingText = self.text else { return true }
    self.deleteBackward() // triggers a delete of all text, does NOT call delegates
    self.insertText(existingText) // does NOT call delegates

    return true
}
 0
Author: Ivan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-03 14:43:46

Musiałem dostosować rozwiązanie @ thomas-verbeek, dodając właściwość, która dotyczy przypadku, gdy użytkownik próbuje wkleić dowolny tekst do pola (tekst został zduplikowany)

class PasswordTextField: UITextField {

    private var barier = true

    override var isSecureTextEntry: Bool {
        didSet {
            if isFirstResponder {
                _ = becomeFirstResponder()
            }
        }
    }

    override func becomeFirstResponder() -> Bool {
        let success = super.becomeFirstResponder()
        if isSecureTextEntry, let text = self.text, barier {
            deleteBackward()
            insertText(text)
        }
        barier = !isSecureTextEntry
        return success
    }

}
 0
Author: olejnjak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-07 15:04:29

Użyłem @EmptyStack answer textField.clearsOnBeginEditing = NO; na moim polu tekstowym hasła passwordTextField.secureTextEntry = YES;, ale nie wyszło to w iOS11 SDK z Xcode 9.3, więc zrobiłem następujący kod, aby osiągnąć. W rzeczywistości chcę zachować tekst (w polu tekstowym), jeśli użytkownik przełącza się między różnymi polami.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField.tag == 2) {
        if ([string isEqualToString:@""] && textField.text.length >= 1) {
            textField.text = [textField.text substringToIndex:[textField.text length] - 1];
        } else{
            textField.text = [NSString stringWithFormat:@"%@%@",textField.text,string];
        }
        return false;
    } else {
        return true;
    }
}

Zwróciłem false w shouldChangeCharactersInRange i zmanipulowany, ponieważ chcę, aby ten kod działał również, jeśli użytkownik kliknie przycisk Usuń, aby usunąć znak.

 0
Author: Aleem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-23 11:18:24

Jest jeszcze jeden post z pytaniami stoskoverflow: Pytanie

Czytanie tego posta wygląda tak, jakby trzeba było ustawić pole tekstowe.clearsOnBeginEditing = NO w metodzie delegata textFieldShouldBeginEditing

 -1
Author: Craig Mellon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:54

Zapisz tekst wprowadzony do właściwości. Na przykład:

NSString *_password;

A następnie w delegacie:

textFieldDidBeginEditing:(UITextField *)textField
assign textField.text = _password;
 -2
Author: Lirik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-14 00:46:22