2016-01-20 2 views
1

Я создал проект Xcode только с одной кнопкой, одним текстовым полем и одной меткой. Я хочу сделать ярлык только видимым, когда ввод текстового поля «test123» или нажата кнопка. Часть с кнопкой работает хорошо, но независимо от того, что я набираю в текстовом поле, ярлык остается скрытым. Кто-нибудь поможет? Это мой текущий код:Как скрыть метку для ввода определенного текстового поля?

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate { 

    @IBOutlet weak var Label: UILabel! 
    @IBOutlet weak var Examplefield: UITextField! 


    override func viewDidLoad() { 

       super.viewDidLoad() 
       // Do any additional setup after loading the view, typically from a nib. 

       Label.hidden = true 

     Examplefield.resignFirstResponder() 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    @IBAction func ButtonPressed(sender: UIButton) { 

     Label.hidden = false 
    } 

    func textFieldDidEndEditing(textField: UITextField) { 
     if Examplefield.text == "test123" { 
      Label.hidden = false 

    } 
     else { 
      Label.hidden = true 
     } 

      } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     self.view.endEditing(true) 
    } 

    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     self.view.endEditing(true) 
     return true 
    } 

} 
+1

Вы должны проверить строку на метод shouldChangeCharactersInRange делегата вместо текущего textFieldDidEndEditing. Пожалуйста, обратитесь к https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextFieldDelegate_Protocol/#//apple_ref/occ/intfm/UITextFieldDelegate/textField:shouldChangeCharactersInRange:replacementString: –

+0

Извините, но до сих пор дон Не получишь. Не могли бы вы дать мне пример кода для этого? –

ответ

4

Самым простым решением является, вероятно, для подключения «Редактирование Changed» событие текстового поля к действию на вашем контроллере:

connecting the editing changed event

Текстовое поле запускает событие «Редактирование измененного», когда пользователь меняет содержимое поля. Вам не нужно устанавливать делегат или регистрироваться для уведомления.

Также есть события «Редактирование закончилось» и «Закончено на выход», если вы хотите подождать, пока пользователь выйдет из этого поля.

+0

Это еще лучше, отличная помощь! –

1

Вы должны реализовать метод shouldChangeCharactersInRange из UITextFieldDelegate для того, чтобы проверить, если строка совпадает со строкой, когда текст изменяется:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    if (string == "test123") { 
     self.Label.hidden = false 
    } else { 
     self.Label.hidden = true 
    } 
    return true 
} 
+0

Текстовое поле по-прежнему остается скрытым, когда я вставляю «test123» :( –

0

Использование shouldChangeCharactersInRange работ ну, но другой вариант будет использовать NSNotification textFieldDidChange.

В вашем viewDidLoad, зарегистрироваться для уведомления:

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("textFieldDidChange:"), name: "UITextFieldTextDidChangeNotification", object: nil) 

Затем определите соответствующий метод:

func textFieldDidChange(notification: NSNotification) { 
    self.label.hidden = (self.textField.text == "test123") 
} 
+0

Это сработало для меня! –

+0

Есть ли возможность отобразить сообщение (сделать ярлык видимым) до тех пор, пока пользователь не закончит редактирование текстового поля? –

+0

В этом случае вам нужно будет сделать свой оригинальный подход, используя textFieldDidEndEditing. Попытка просто использовать textField.text вместо фактического имени свойства. textField всегда будет текстовым полем, вызывающим вызов метода делегата. –

-1

метод использования UITextField Делегат

- (void)textFieldDidBeginEditing:(UITextField *)textField{ 
    // your condition 
} 

enter image description here

Смежные вопросы