iOS: как сделать подсветку поля UITextfield при касании? - PullRequest
3 голосов
/ 01 сентября 2011

Должен ли я сделать это с помощью кода или в инспекторе есть что-то, чего мне не хватает?

Ответы [ 3 ]

10 голосов
/ 01 сентября 2011

В отличие от UIButton, UITextField не имеет выделенного состояния. Если вы хотите изменить цвет текстового поля, когда оно получает фокус, вы можете использовать UITextFieldDelegate s

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField

Это будет вызвано, когда элемент управления впервые получит фокус. Оттуда вы можете изменить фон и / или цвет текста. Когда фокус покидает элемент управления, вы можете использовать

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField

для сброса цветов.

0 голосов
/ 11 февраля 2016

Если вы все еще хотите иметь возможность использовать другие функции делегата в вашем ViewController, я рекомендую вам добавить это:

override weak var delegate: UITextFieldDelegate? {
    didSet {
        if delegate?.isKindOfClass(YourTextField) == false {
            // Checks so YourTextField (self) doesn't set the textFieldDelegate when assigning self.delegate = self 
            textFieldDelegate = delegate
            delegate = self
        }
    }
}

// This delegate will actually be your public delegate to the view controller which will be called in your overwritten functions
private weak var textFieldDelegate: UITextFieldDelegate?

class YourTextField: UITextField, UITextFieldDelegate {

    init(){
        super.init(frame: CGRectZero)
        self.delegate = self
    }

    func textFieldDidBeginEditing(textField: UITextField) {
        textField.backgroundColor = UIColor.blackColor()
        textFieldDelegate?.textFieldDidBeginEditing?(textField)
    }

    func textFieldDidEndEditing(textField: UITextField) {
        textField.backgroundColor = UIColor.whiteColor()
        textFieldDelegate?.textFieldDidBeginEditing?(textField)
    }
}

Таким образом, вашему контроллеру представления не нужно знать, что вы перезаписали делегат, и вы можете реализовать функции UITextFieldDelegate в вашем контроллере представления.

let yourTextField = YourTextField()
yourTextField.delegate = self
0 голосов
/ 03 февраля 2016

В Swift 2 вы можете использовать функции делегата, как показано ниже,

class CustomTextField: UITextField, UITextFieldDelegate{
    init(){
        super.init(frame: CGRectMake(0, 0, 0, 0))
        self.delegate = self // SETTING DELEGATE TO SELF
    }

    func textFieldDidBeginEditing(textField: UITextField) {
        textField.backgroundColor = UIColor.greenColor() // setting a highlight color
    }

    func textFieldDidEndEditing(textField: UITextField) {
        textField.backgroundColor = UIColor.whiteColor() // setting a default color
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...