Ваш код работает нормально. Вам просто нужно помнить, чтобы каждый раз устанавливать рамку градиента. Лучше всего просто сделать категорию градиента также заданной для вас рамкой представления.
Таким образом, вы не забудете, и оно применяется отлично.
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()
}
}
Кнопки Просмотры. Вы применяете к нему градиенты так же, как и к другому виду.
вы можете поместить это где угодно, но не в UIButton
func TextFieldEndEditing(text fiend name: UITextField!) -> Bool
{
return (false)
}
, тогда вы можете поместить этот код в кнопку (также, например):
self.view.endEditing(true)
это сработало для меня
Возвращаемая истинная часть этого только сообщает текстовому полю, разрешено ли возвращаться. Вы должны вручную указать текстовому полю, чтобы отклонить клавиатуру (или ее первый ответчик), и это делается путем вызова resignFirstResponder()
.
func textFieldShouldReturn(textField: UITextField) -> Bool // called when 'return' key pressed. return false to ignore.
{
textField.resignFirstResponder()
return true
}
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;
}
со всем этим, ваша клавиатура начнет отклоняться, коснувшись внешнего поля, а также нажав клавишу возврата. UITextFieldDelegate
... большое спасибо!
– Adriano Tadao
19 December 2015 в 01:23
Использование необязательной функции из UITextFieldDelegate
.
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
return textField.endEditing(false)
}
false
означает, что поле можно попросить уйти в отставку. true
- уйти в отставку.
Simple Swift 3 Solution: добавьте эту функцию в свои контроллеры представлений, которые имеют текстовое поле:
@IBAction func textField(_ sender: AnyObject) {
self.view.endEditing(true);
}
Затем откройте ваш помощник и убедитесь, что ваша Main.storyboard находится на одной стороне вашего вид и требуемый файл диспетчера view.swift находится на другом. Нажмите на текстовое поле, а затем выберите в правой панели утилиты «Показать инспектор подключений». Управляйте перетаскиванием из «Сделанный конец при выходе» в указанную выше функцию в вашем быстром файле. Повторите для любого другого текстового поля в этой сцене и ссылайтесь на ту же функцию.
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;
}
Работает для меня
Когда пользователь нажимает кнопку «Готово» на текстовой клавиатуре, генерируется событие «Завершить выход»; в то время нам нужно сообщить текстовому полю, чтобы он отказался от контроля, чтобы клавиатура исчезла. Для этого нам нужно добавить метод действия к нашему классу контроллера. Выберите ViewController.swift, добавьте следующий метод действий:
@IBAction func textFieldDoneEditing(sender: UITextField) {
sender.resignFirstResponder()}
Выберите Main.storyboard в Навигаторе проектов и вызовите инспектор соединений. Перетащите из круга рядом с надписью «Закончить на выходе» на желтый значок «Контроллер» в раскадровке и отпустите. Появится небольшое всплывающее меню, содержащее имя одного действия, которое мы только что добавили. Нажмите на действие textFieldDoneEditing, чтобы выбрать его, и все.
Другой способ сделать это, который в основном использует раскадровку и легко позволяет вам иметь несколько текстовых полей:
@IBAction func resignKeyboard(sender: AnyObject) {
sender.resignFirstResponder()
}
Подключите все ваши текстовые поля для этого контроллера представления к этому действию на Did End On Exit
события каждого поля.
Вот обновление Swift 3.0 для комментария peacetype:
textField.addTarget(nil, action:Selector(("firstResponderAction:")), for:.editingDidEndOnExit)
В контроллере вида, который вы используете:
//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);
}
Убедитесь, что ваш делегат textField установлен в контроллер представления, из которого вы записываете код, связанный с текстовым полем.
self.textField.delegate = self
Я бы предложил запустить класс из 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;
}
}
Вы можете заставить приложение отклонить клавиатуру, используя следующую функцию
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
self.myTextField.delegate = self
. он работает, но я действительно не знаю, что здесь происходит (попробовал поиск по Google, без каких-либо успехов)
– jonnie
26 April 2015 в 18:10
Чтобы получить автоматическое отключение клавиатуры, я помещаю этот код в один из методов класса моего настраиваемого текстового поля:
textField.addTarget(nil, action:"firstResponderAction:", forControlEvents:.EditingDidEndOnExit)
Замените имя своей розетки на textField
.
@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);
}