как скрыть клавиатуру на текстовом представлении, чтобы вернуться в swift3 [duplicate]

Ваш код работает нормально. Вам просто нужно помнить, чтобы каждый раз устанавливать рамку градиента. Лучше всего просто сделать категорию градиента также заданной для вас рамкой представления.

Таким образом, вы не забудете, и оно применяется отлично.

extension UIView {
    func applyGradient(colours: [UIColor]) -> Void {
        self.applyGradient(colours, locations: nil)
    }

    func applyGradient(colours: [UIColor], locations: [NSNumber]?) -> Void {
        let gradient: CAGradientLayer = CAGradientLayer()
        gradient.frame = self.bounds
        gradient.colors = colours.map { $0.CGColor }
        gradient.locations = locations
        self.layer.insertSublayer(gradient, atIndex: 0)
    }
}

class ViewController: UIViewController {

    @IBOutlet weak var btn: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.btn.titleLabel?.textColor = UIColor.whiteColor()

        self.btn.applyGradient([UIColor.yellowColor(), UIColor.blueColor()])
        self.view.applyGradient([UIColor.yellowColor(), UIColor.blueColor(), UIColor.redColor()], locations: [0.0, 0.5, 1.0])
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

Кнопки Просмотры. Вы применяете к нему градиенты так же, как и к другому виду.

153
задан Juan Boero 30 November 2015 в 18:58
поделиться

15 ответов

вы можете поместить это где угодно, но не в UIButton

 func TextFieldEndEditing(text fiend name: UITextField!) -> Bool
{
    return (false)
}

, тогда вы можете поместить этот код в кнопку (также, например):

self.view.endEditing(true)

это сработало для меня

1
ответ дан Blake Scott 18 August 2018 в 01:27
поделиться

Возвращаемая истинная часть этого только сообщает текстовому полю, разрешено ли возвращаться. Вы должны вручную указать текстовому полю, чтобы отклонить клавиатуру (или ее первый ответчик), и это делается путем вызова resignFirstResponder().

func textFieldShouldReturn(textField: UITextField) -> Bool // called when 'return' key pressed. return false to ignore.
{
    textField.resignFirstResponder()
    return true
}
73
ответ дан clemens 18 August 2018 в 01:27
поделиться
  • 1
    спасибо ... в моем случае & quot; resignFirstResponder () & quot; метод не получал автоматически, и я думал, что он не поддерживает, но при написании вручную его рабочих замечаний. Это то, что я ищу. – Ashwinkumar Mangrulkar 12 June 2014 в 10:49
  • 2
    @AshwinMangrulkar вы можете ожидать, что в бета-версии функции автоматического завершения Xcode 6 могут быть инвалиды. – Paul Brewczynski 17 July 2014 в 08:17
  • 3
    @ 0x7fffffff вы могли бы объяснить, что «resignFirstResponder»? означает ? Я прочитал документацию для UIresponder, и я не совсем понимаю, что это такое. Похоже, что это нечеткий метод, используемый для «свободного сосредоточения внимания на конкретном элементе пользовательского интерфейса». который настраивается в UITextField. – Paul Brewczynski 17 July 2014 в 08:26
  • 4
    и, конечно, точка с запятой после «истина» больше не требуется – 36 By Design 4 April 2016 в 16:07
  • 5
    разве это не требование, чтобы ваш viewController соответствовал UITextFieldDelegate? – Honey 21 September 2016 в 17:15
  • Добавить UITextFieldDelegate в объявление класса:
    class ViewController: UIViewController, UITextFieldDelegate
    
  • Подключить textfield или записать его программным путем
    @IBOutlet weak var userText: UITextField!
    
  • установить ваш контроллер представления как текстовые поля, делегированные в поле зрения, загрузились:
    override func viewDidLoad() {
    super.viewDidLoad()
    self.userText.delegate = self
    }
    
  • Добавьте следующую функцию
    func textFieldShouldReturn(userText: UITextField!) -> Bool {
        userText.resignFirstResponder()
        return true;
    }
    
    со всем этим, ваша клавиатура начнет отклоняться, коснувшись внешнего поля, а также нажав клавишу возврата.
41
ответ дан Dharmesh Kheni 18 August 2018 в 01:27
поделиться
  • 1
    Спасибо чувак! Мне не хватало этого: UITextFieldDelegate ... большое спасибо! – Adriano Tadao 19 December 2015 в 01:23
  • 2
    По какой-то причине, когда я устанавливаю txtField.delegate = self, я не могу ввести его в это текстовое поле после запуска приложения – Jesus Adolfo Rodriguez 23 May 2016 в 06:04
  • 3
    @JesusAdolfoRodriguez должна быть причина этой ошибки, этот код не вызывает никаких проблем. : D Счастливое кодирование! – Satnam Sync 22 July 2016 в 12:24
  • 4
    Спасибо за шаг за шагом. Это было более полезно для меня, чем просто блок кода. – kenhkelly 29 September 2016 в 12:32
  • 5
    «со всем этим ваша клавиатура начнет отклоняться, коснувшись внешнего поля текста». - Не правда. textFieldShouldReturn вызывается только при нажатии кнопки возврата. – Jurasic 9 December 2016 в 15:10

Swift

Использование необязательной функции из UITextFieldDelegate.

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    return textField.endEditing(false)
}

false означает, что поле можно попросить уйти в отставку. true - уйти в отставку.

2
ответ дан dimpiax 18 August 2018 в 01:27
поделиться

Simple Swift 3 Solution: добавьте эту функцию в свои контроллеры представлений, которые имеют текстовое поле:

@IBAction func textField(_ sender: AnyObject) {
    self.view.endEditing(true);
}

Затем откройте ваш помощник и убедитесь, что ваша Main.storyboard находится на одной стороне вашего вид и требуемый файл диспетчера view.swift находится на другом. Нажмите на текстовое поле, а затем выберите в правой панели утилиты «Показать инспектор подключений». Управляйте перетаскиванием из «Сделанный конец при выходе» в указанную выше функцию в вашем быстром файле. Повторите для любого другого текстового поля в этой сцене и ссылайтесь на ту же функцию.

19
ответ дан elarcoiris 18 August 2018 в 01:27
поделиться

Swift 3

Добавьте этот код ниже в свой VC

//hide keyboard when user tapps on return key on the keyboard
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    self.view.endEditing(true);
    return false;
}

Работает для меня

5
ответ дан Gilad Brunfman 18 August 2018 в 01:27
поделиться

Когда пользователь нажимает кнопку «Готово» на текстовой клавиатуре, генерируется событие «Завершить выход»; в то время нам нужно сообщить текстовому полю, чтобы он отказался от контроля, чтобы клавиатура исчезла. Для этого нам нужно добавить метод действия к нашему классу контроллера. Выберите ViewController.swift, добавьте следующий метод действий:

@IBAction func textFieldDoneEditing(sender: UITextField) {
sender.resignFirstResponder()}

Выберите Main.storyboard в Навигаторе проектов и вызовите инспектор соединений. Перетащите из круга рядом с надписью «Закончить на выходе» на желтый значок «Контроллер» в раскадровке и отпустите. Появится небольшое всплывающее меню, содержащее имя одного действия, которое мы только что добавили. Нажмите на действие textFieldDoneEditing, чтобы выбрать его, и все.

7
ответ дан Ian Seth Colin 18 August 2018 в 01:27
поделиться

Другой способ сделать это, который в основном использует раскадровку и легко позволяет вам иметь несколько текстовых полей:

@IBAction func resignKeyboard(sender: AnyObject) {
    sender.resignFirstResponder()
}

Подключите все ваши текстовые поля для этого контроллера представления к этому действию на Did End On Exit события каждого поля.

10
ответ дан James Thompson 18 August 2018 в 01:27
поделиться
  • 1
    Извините за удар, но я пытаюсь использовать этот метод в своем приложении, и он, похоже, не работает. У меня есть текстовое поле в навигационной панели, и я связал его с этим действием с этим событием, как вы сказали, но он не работает во время выполнения. – wasimsandhu 26 March 2016 в 23:22
  • 2
    Это может привести к сбою, если отправитель имеет тип UIBarButtonItem. Если я добавлю панель инструментов с кнопкой Done на цифровую клавиатуру, тогда ваш код будет сбой с непризнанным селектором, отправленным в журнал экземпляра. – Jayprakash Dubey 26 July 2016 в 06:17

Вот обновление Swift 3.0 для комментария peacetype:

textField.addTarget(nil, action:Selector(("firstResponderAction:")), for:.editingDidEndOnExit)
6
ответ дан jomafer 18 August 2018 в 01:27
поделиться

В контроллере вида, который вы используете:

//suppose you are using the textfield label as this

@IBOutlet weak var emailLabel: UITextField!
@IBOutlet weak var passwordLabel: UITextField!

//then your viewdidload should have the code like this
override func viewDidLoad() {
        super.viewDidLoad()

        self.emailLabel.delegate = self
        self.passwordLabel.delegate = self

    }

//then you should implement the func named textFieldShouldReturn
 func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }

// -- then, further if you want to close the keyboard when pressed somewhere else on the screen you can implement the following method too:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true);
    }
1
ответ дан kanishk verma 18 August 2018 в 01:27
поделиться

Убедитесь, что ваш делегат textField установлен в контроллер представления, из которого вы записываете код, связанный с текстовым полем.

self.textField.delegate = self
2
ответ дан Milad Gueramian 18 August 2018 в 01:27
поделиться

Я бы предложил запустить класс из SRC:

import Foundation
import UIKit

// Don't forget the delegate!
class ViewController: UIViewController, UITextFieldDelegate {

required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

@IBOutlet var myTextField : UITextField?

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

    self.myTextField.delegate = self;
}

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

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

}

7
ответ дан papay0 18 August 2018 в 01:27
поделиться

Вы можете заставить приложение отклонить клавиатуру, используя следующую функцию

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

Вот полный пример, чтобы лучше проиллюстрировать это:

//
//  ViewController.swift
//
//

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet var myTextField : UITextField

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

        self.myTextField.delegate = self
    }

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

Источник кода: http://www.snip2code.com/Snippet/85930/swift-delegate-sample

285
ответ дан paper1111 18 August 2018 в 01:27
поделиться
  • 1
    Я отсутствовал & quot; self.myTextField.delegate = self; & quot; Спасибо! – tylerlindell 14 December 2014 в 02:21
  • 2
    Мне не хватало UITextFieldDelegate! – Cesare 26 April 2015 в 13:29
  • 3
    @RSC вы можете объяснить мне строку self.myTextField.delegate = self. он работает, но я действительно не знаю, что здесь происходит (попробовал поиск по Google, без каких-либо успехов) – jonnie 26 April 2015 в 18:10
  • 4
    @kommradHomer, без сомнения, есть что-то еще, что делает вашу клавиатуру не показывать. Если вы хотите, поместите свой код на pastebin и вставьте ссылку здесь для меня, чтобы увидеть его. – rsc 22 October 2015 в 17:29
  • 5
    @RSC, вы, скорее всего, были правы. Я новичок на 2 дня на ios, так как-то избавился от своей проблемы, и все сработало, как вы сказали :) – kommradHomer 23 October 2015 в 06:40

Чтобы получить автоматическое отключение клавиатуры, я помещаю этот код в один из методов класса моего настраиваемого текстового поля:

textField.addTarget(nil, action:"firstResponderAction:", forControlEvents:.EditingDidEndOnExit)

Замените имя своей розетки на textField.

10
ответ дан peacetype 18 August 2018 в 01:27
поделиться
  • 1
    Отлично. Это самый короткий и лучший вариант, на мой взгляд. Особенно, когда вы создаете текстовое поле внутри другого метода. Как внутри заголовка таблицы. – kakubei 28 January 2016 в 13:26

@RSC

для меня критическое дополнение в Xcode версии 6.2 (6C86e) находится в override func viewDidLoad()

 self.input.delegate = self;

Пробовал заставить его работать с ключом возврата в течение нескольких часов пока я не нашел ваш пост, RSC. Спасибо

Кроме того, если вы хотите скрыть клавиатуру, если вы касаетесь в любом месте экрана:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { self.view.endEditing(true); }

12
ответ дан Tobias F. Meier 18 August 2018 в 01:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: