Как подключить дополнительную розетку от распределительной коробки


Как провести розетку от распределительной коробки

[desc][/desc]


Блок: 1/5 | Кол-во символов: 224
Источник: https://led-set.ru/raznoe/kak-podklyuchit-rozetku-ot-raspredkorobki.html

Содержание

  • 1 Способы расключения распредкоробки 
  • 2 Пример соединения распред. коробки с одним однаоклавишным выключателем
  • 3 Как подключить провода в распределительной коробке правильно. Как подключить розетку от распредкоробки
    • 3.1 Как провести розетку от распределительной коробки, как подключить провода
      • 3.1.1 Способы расключения распредкоробки
      • 3.1.2 Пример соединения распред. коробки с одним однаоклавишным выключателем
      • 3.1.3 Монтажа распаечной коробки: Видео
        • 3.1.3.1 :
      • 3.1.4 Подготовительные работы
        • 3.1.4.1 Выбор провода
      • 3.1.5 Подробная схема подключения розетки
  • 4 Монтажа распаечной коробки: Видео
    • 4.1 :
  • 5 Способ установки проводки и розетки
  • 6 Подключение различных электроприемников в распределительной коробке
    • 6.1 Подключение групповых проводов
    • 6.2 Подключение розеток
    • 6.3 Подключение выключателя
    • 6.4 Подключение светильника и розетки
  • 7 Подготовительные работы
    • 7.1 Выбор провода
  • 8 Основные схемы расключения
    • 8.1 Как подключить розетки
    • 8.2 Подключение одноклавишного выключателя
    • 8.3 Подключение двухклавишного выключателя
  • 9 На какой высоте устанавливать розетки
  • 10 Что такое распределительная коробка
  • 11 Здравствуйте, уважаемые посетители
  • 12 Заключение
  • 13 О разделах:
  • 14 Устройство розетки

Как установить центральный выключатель света или розетку на 2-местную коробку

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

Обратите особое внимание на стиль вашей распределительной коробки; есть разные решения для покрытия каждого.

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

Стандартный ящик на 1 группу

Стандартный ящик на 2 группы

Распределительная коробка 4x4 "

Распределительная коробка 4-11 / 16 "

Закрытие коробки на 2 группы одним переключателем

Если вам нужна более глубокая коробка для размещения громоздкого переключателя света или розетки GFCI, или если вы не можете безопасно втиснуть электрические провода в единую коробку, вам может потребоваться установить устройство в 2-местную электрическую коробку.

Если у вас есть электрическая коробка для 2 устройств, но вам нужен только 1 выключатель или розетка, у вас есть 2 варианта:

  1. установить устройство в сторону
  2. центрируйте устройство

Слева вы увидите, что первое устройство находится сбоку.

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



Добавление устройства в распределительную коробку 4x4 "

Квадратные распределительные коробки не имеют выступов для крепления устройств.

Добавление грязевого кольца в коробку позволит вам установить одно устройство.


Грязезащитное кольцо удерживается на месте винтами соединительной коробки в противоположных углах.

Затем можно установить выключатель или розетку непосредственно на грязевое кольцо.

Затем на устройство можно установить 2-местную крышку центрального устройства так же, как и стандартную крышку.Примечание: вам может потребоваться обрезать винты крышки.


Монтаж одного устройства в большой квадратной распределительной коробке

Квадратные переходные коробки большего размера размером 4-11 / 16 дюймов могут также содержать одно устройство с добавлением грязевого кольца.



Дополнительное покрытие вокруг одиночной электрической коробки

Крышки для двух секций с вырезом под центральное устройство могут также использоваться с одинарными секциями.

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

Стандартная панель переключателя не закрывает поврежденную стену рядом с переключателем.


Используйте 2-местную крышку с вырезом по центру, чтобы закрыть одно устройство в 1-канальной распределительной коробке, когда вам нужно закрыть дополнительное пространство на стене с обеих сторон коробки.


Эта пластина устанавливается на электрическую коробку так же, как и стандартная крышка.

Разница в том, что стандартная крышка имеет ширину 2-3 / 4 дюйма, в то время как эта более широкая пластина имеет ширину 4-9 / 16 дюймов, что обеспечивает большее покрытие слева и справа от коробки.

Если у вас есть зазор вокруг распределительной коробки с одним блоком, эта пластина решит некрасивую проблему.

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

.

Подключить пользовательский интерфейс к коду

В этом уроке вы подключите основной пользовательский интерфейс (UI) приложения FoodTracker к коду и определите некоторые действия, которые пользователь может выполнять в этом пользовательском интерфейсе.

Цели обучения

По окончании урока вы сможете:

  • Объясните взаимосвязь между сценой в раскадровке и базовым контроллером представления.

  • Создание связей между выходами и действиями между элементами пользовательского интерфейса в раскадровке и исходном коде

  • Обработка пользовательского ввода из текстового поля и отображение результата в пользовательском интерфейсе

  • Сделать класс соответствующим протоколу

  • Понять схему делегирования

  • Следуйте шаблону целевого действия при разработке архитектуры приложения

Подключение пользовательского интерфейса к исходному коду

Элементы раскадровки связаны с исходным кодом.Важно понимать связь раскадровки с кодом, который вы пишете.

В раскадровке сцена представляет один экран содержимого и обычно один контроллер представления. Контроллеры представления реализуют поведение вашего приложения. Контроллер представления управляет одним представлением содержимого с его иерархией подпредставлений. Контроллеры представлений координируют поток информации между моделью данных приложения, которая инкапсулирует данные приложения, и представлениями, которые отображают эти данные, управляют жизненным циклом своих представлений содержимого, обрабатывают изменения ориентации при повороте устройства, определяют навигацию внутри вашего app и реализовать поведение для ответа на ввод пользователя.Все объекты контроллера представления в iOS имеют тип UIViewController или один из его подклассов.

Вы определяете поведение своих контроллеров представления в коде, создавая и реализуя подклассы настраиваемых контроллеров представления. Затем вы можете создать связь между этими классами и сценами в раскадровке, чтобы получить поведение, которое вы определили в коде, и пользовательский интерфейс, который вы определили в своей раскадровке.

Xcode уже создал один такой класс, на который вы смотрели ранее, ViewController.swift и подключил его к сцене, над которой вы сейчас работаете в раскадровке. В будущем, когда вы добавите новые сцены, вы сами установите это соединение в Инспекторе идентичности. Инспектор идентичности позволяет редактировать свойства объекта в раскадровке, связанные с идентичностью этого объекта, например, к какому классу принадлежит объект.

Во время выполнения ваша раскадровка создает экземпляр ViewController , вашего подкласса настраиваемого контроллера представления. Сцена из вашей раскадровки появляется на экране устройства, а поведение пользовательского интерфейса определяется в ViewController.Свифт .

Хотя сцена подключена к ViewController.swift , это не единственное подключение, которое необходимо установить. Чтобы определить взаимодействие в вашем приложении, исходный код вашего контроллера представления должен иметь возможность взаимодействовать с представлениями в вашей раскадровке. Это делается путем определения дополнительных соединений, называемых выходами и действиями, между представлениями в раскадровке и файлами исходного кода контроллера представления.

Создание выходов для элементов пользовательского интерфейса

Выходы предоставляют способ ссылаться на объекты интерфейса - объекты, добавленные в раскадровку, - из файлов исходного кода.Чтобы создать выход, перетащите, удерживая клавишу Control, от определенного объекта в раскадровке к файлу контроллера представления. Эта операция создает свойство для объекта в вашем файле контроллера представления, которое позволяет вам получать доступ к этому объекту и управлять им из кода во время выполнения.

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

Для подключения текстового поля к ViewController.swift с кодом

  1. Откройте свою раскадровку Main.раскадровка .

  2. Нажмите кнопку «Помощник» на панели инструментов Xcode в правом верхнем углу Xcode, чтобы открыть редактор помощника.

  3. Если вам нужно больше места для работы, сверните навигатор проекта и область служебных программ, щелкнув кнопки Navigator и Utilities на панели инструментов Xcode.

    Вы также можете свернуть вид структуры.

  4. На панели выбора редактора, которая появляется в верхней части помощника редактора, измените помощник редактора с предварительного просмотра на автоматический> ViewController.Свифт .

    ViewController.swift отображается в редакторе справа.

  5. В ViewController.swift найдите строку class , которая должна выглядеть так:

    1. класс ViewController: UIViewController {
  6. Под строкой class добавьте следующее:

    Вы только что добавили комментарий к исходному коду.Напомним, что комментарий - это фрагмент текста в файле исходного кода, который не компилируется как часть программы, но предоставляет контекст или полезную информацию об отдельных фрагментах кода.

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

  7. В раскадровке выберите текстовое поле.

  8. Удерживая нажатой клавишу Control, перетащите из текстового поля на холсте к отображению кода в редакторе справа, останавливая перетаскивание в строке под комментарием, который вы только что добавили в ViewController.swift .

  9. В открывшемся диалоговом окне в поле Имя введите nameTextField . Остальные параметры оставьте как есть.

  10. Щелкните Подключиться.

    Xcode добавляет необходимый код в ViewController.swift для хранения ссылки на текстовое поле и настраивает раскадровку для установки этого соединения.

    1. @IBOutlet weak var nameTextField: UITextField!

Найдите минутку, чтобы понять, что происходит в этой строке кода.

Атрибут IBOutlet сообщает Xcode, что вы можете подключиться к свойству nameTextField из Interface Builder (вот почему атрибут имеет префикс IB ).Ключевое слово weak указывает, что ссылка не мешает системе освободить указанный объект. Слабые ссылки помогают предотвратить циклы ссылок; однако, чтобы объект оставался живым и находился в памяти, вам необходимо убедиться, что какая-то другая часть вашего приложения имеет сильную ссылку на объект. В данном случае это супервизор текстового поля. Суперпредставление поддерживает сильную ссылку на все свои подвиды. Пока супервизор остается живым и находится в памяти, все субпредставления также остаются живыми.Точно так же контроллер представления имеет сильную ссылку на свое представление содержимого - поддерживая всю иерархию представлений в памяти и в действии.

Остальная часть объявления определяет неявно развернутую необязательную переменную типа UITextField с именем nameTextField . Обратите особое внимание на восклицательный знак в конце объявления типа. Этот восклицательный знак указывает на то, что тип является неявно развернутым необязательным типом, который является необязательным типом, который всегда будет иметь значение после его первой установки.Когда вы обращаетесь к неявно развернутому необязательному элементу, система предполагает, что он имеет допустимое значение, и автоматически развертывает его для вас. Обратите внимание, что это приводит к завершению работы приложения, если значение переменной еще не было установлено.

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

Теперь подключите метку к вашему коду так же, как вы подключили текстовое поле.

Для подключения метки к ViewController.swift код

  1. В раскадровке выберите метку.

  2. Удерживая нажатой клавишу «Control», перетащите от метки на холсте к отображению кода в редакторе справа, остановив перетаскивание в строке сразу под свойством nameTextField в ViewController.swift .

  3. В появившемся диалоговом окне в поле Имя введите foodNameLabel .Остальные параметры оставьте как есть.

  4. Щелкните Подключиться.

Опять же, Xcode добавляет необходимый код в ViewController.swift для хранения ссылки на метку и настраивает раскадровку для установки этого соединения. Этот выход похож на текстовое поле, за исключением своего имени и типа (это UILabel , чтобы соответствовать типу объекта в раскадровке).

  1. @IBOutlet weak var foodNameLabel: UILabel!

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

Розетки позволяют ссылаться на элементы интерфейса в коде, но вам все равно нужен способ реагировать всякий раз, когда пользователь взаимодействует с элементами. Вот тут-то и нужны действия.

Определите действие, которое необходимо выполнить

Приложения для iOS основаны на программировании, управляемом событиями.То есть поток приложения определяется событиями: системными событиями и действиями пользователя. Пользователь выполняет действия в интерфейсе, которые запускают события в приложении. Эти события приводят к выполнению логики приложения и манипулированию его данными. Затем реакция приложения на действие пользователя отражается в пользовательском интерфейсе. Поскольку пользователь, а не разработчик, контролирует выполнение определенных частей кода приложения, вы хотите точно определить, какие действия пользователь может выполнять и что происходит в ответ на эти действия.

Действие (или метод действия) - это фрагмент кода, связанный с событием, которое может произойти в вашем приложении. Когда это событие происходит, система выполняет код действия. Вы можете определить метод действия для выполнения чего угодно - от управления фрагментом данных до обновления пользовательского интерфейса. Вы используете действия, чтобы управлять потоком вашего приложения в ответ на пользовательские или системные события.

Вы создаете действие так же, как создаете розетку: удерживая нажатой клавишу Control, перетащите из определенного объекта в раскадровке в файл контроллера представления.Эта операция создает метод в вашем файле контроллера представления, который запускается, когда пользователь взаимодействует с объектом, к которому прикреплен метод действия.

Начните с создания простого действия, которое устанавливает для метки значение Default Text всякий раз, когда пользователь нажимает кнопку Set Default Text. (Код для установки метки для текста в текстовом поле немного сложнее, поэтому вы напишете его в разделе «Обработка пользовательского ввода».)

Чтобы создать действие setDefaultLabelText в ViewController.быстрый код

  1. В ViewController.swift , чуть выше последней фигурной скобки (} ), добавьте следующее:

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

  2. В раскадровке нажмите кнопку Установить текст метки по умолчанию.

  3. Удерживая нажатой клавишу «Control», перетащите кнопку «Установить текст метки по умолчанию» на холсте на отображение кода в редакторе справа, остановив перетаскивание в строке под комментарием, который вы только что добавили в ViewController.Свифт .

  4. В появившемся диалоговом окне для Connection выберите Action.

  5. В поле Имя введите setDefaultLabelText .

  6. В поле Тип выберите UIButton .

    Вы могли заметить, что значение поля Type по умолчанию - AnyObject . В Swift AnyObject - это тип, используемый для описания объекта, который может принадлежать любому классу. Определение типа этого метода действия как UIButton означает, что только объекты кнопки могут подключаться к этому действию.Хотя это несущественно для действия, которое вы создаете прямо сейчас, о нем важно помнить на потом.

    Остальные параметры оставьте как есть.

  7. Щелкните Подключиться.

Xcode добавляет необходимый код в ViewController.swift для настройки метода действия.

  1. @IBAction func setDefaultLabelText (_ отправитель: UIButton) {
  2. }

Параметр отправителя относится к объекту, который был ответственен за запуск действия - в данном случае к кнопке.Атрибут IBAction указывает, что метод - это действие, к которому можно подключиться из раскадровки в Интерфейсном Разработчике. Остальная часть объявления объявляет метод с именем setDefaultLabelText (_ :) .

Сейчас объявление метода пусто. Код для сброса значения метки довольно прост.

Для реализации действия сброса метки в коде ViewController

  1. В ViewController.swift найдите метод действия setDefaultLabelText , который вы только что добавили.

  2. В реализации метода между фигурными скобками ( {} ) добавьте эту строку кода:

    1. foodNameLabel.text = "Текст по умолчанию"

    Как вы могли догадаться, этот код устанавливает для свойства текст метки значение Текст по умолчанию.

    Обратите внимание, что вам не нужно указывать тип текста по умолчанию, потому что вывод типа Swift может видеть, что вы назначаете что-то типа String , и может правильно вывести тип.

iOS обрабатывает весь код перерисовки за вас, так что это фактически весь код, который вам нужно написать на данный момент. Ваш метод действия setDefaultLabelText (_ :) должен выглядеть так:

  1. @IBAction func setDefaultLabelText (_ отправитель: UIButton) {
  2. foodNameLabel.text = "Текст по умолчанию"
  3. }

Контрольная точка: Проверьте свои изменения, запустив симулятор.Когда вы нажимаете кнопку Установить текст метки по умолчанию, вызывается ваш метод setDefaultLabelText (_ :) , и значение текста объекта foodNameLabel изменяется с Meal Name (значение, установленное в раскадровке) на Текст по умолчанию (значение, заданное действием). Вы должны увидеть изменения в своем пользовательском интерфейсе.

Хотя изменение названия блюда на «Текст по умолчанию» не особо полезно, оно иллюстрирует важный момент. Только что реализованное поведение является примером шаблона целевого действия в дизайне приложения для iOS.Целевое действие - это шаблон проектирования, при котором один объект отправляет сообщение другому объекту при наступлении определенного события.

В этом случае:

  • Событие - это нажатие пользователем кнопки «Установить текст по умолчанию».

  • Действие: setDefaultLabelText (_) .

  • Целевой объект - ViewController (где определен метод действия).

  • Отправителем является кнопка «Установить текст метки по умолчанию».

Система отправляет сообщение, вызывая метод действия для цели и передавая объект отправителя. Отправителем обычно является элемент управления, например кнопка, ползунок или переключатель, который может запускать событие в ответ на взаимодействие с пользователем, такое как касание, перетаскивание или изменение значения. Этот паттерн очень распространен в программировании приложений для iOS, и на уроках вы встретите его гораздо чаще.

Процесс пользовательского ввода

На этом этапе пользователи могут сбросить метку названия еды до значения по умолчанию, но вы действительно хотите, чтобы пользователи вводили свои собственные названия еды, используя текстовое поле.Для простоты вы обновите значение text объекта foodNameLabel всякий раз, когда пользователь вводит текст в текстовое поле и нажимает Return.

Когда вы работаете с принятием пользовательского ввода из текстового поля, вам нужна помощь делегата текстового поля. Делегат - это объект, который действует от имени или в координации с другим объектом. Объект делегирования - в данном случае текстовое поле - сохраняет ссылку на другой объект - делегат - и в соответствующее время объект делегирования отправляет сообщение делегату.Сообщение сообщает делегату о событии, которое делегирующий объект собирается обработать или только что обработал. Делегат может ответить, например, обновив внешний вид или состояние себя или других объектов в приложении, или вернув значение, которое влияет на то, как обрабатывается надвигающееся событие.

Делегат текстового поля взаимодействует с текстовым полем, пока пользователь редактирует текст, и знает, когда происходят важные события, например, когда пользователь начинает или прекращает редактирование текста. Делегат может использовать эту информацию, чтобы сохранить или очистить данные в нужное время, закрыть клавиатуру и т. Д.

Любой объект может выступать в качестве делегата для другого объекта, если он соответствует соответствующему протоколу. Протокол, определяющий делегата текстового поля, называется UITextFieldDelegate . Очень часто контроллер представления становится делегатом для объектов, которыми он управляет. В этом случае вы сделаете свой экземпляр ViewController делегатом текстового поля.

Во-первых, ViewController должен принять протокол UITextFieldDelegate .Вы принимаете протокол, перечисляя его как часть строки объявления класса.

Для принятия протокола UITextFieldDelegate

  1. Если помощник редактора открыт, вернитесь в стандартный редактор, нажав кнопку Стандартный.

  2. Разверните навигатор проекта и область служебных программ, щелкнув кнопки Navigator и Utilities на панели инструментов Xcode.

  3. В навигаторе проекта выберите ViewController.Свифт .

  4. В ViewController.swift найдите строку class , которая должна выглядеть так:

    1. класс ViewController: UIViewController {
  5. После UIViewController добавьте запятую (, ) и UITextFieldDelegate , чтобы принять протокол.

    1. класс ViewController: UIViewController, UITextFieldDelegate {

Приняв протокол UITextFieldDelegate , вы сообщаете компилятору, что класс ViewController может действовать как действительный делегат текстового поля.Это означает, что вы можете реализовать методы протокола для обработки ввода текста и назначить экземпляры класса ViewController в качестве делегата текстового поля.

Чтобы установить объект ViewController в качестве делегата его свойства nameTextField

  1. В ViewController.swift найдите метод viewDidLoad () , который должен выглядеть так:

    1. функция отмены viewDidLoad () {
    2. супер.viewDidLoad ()
    3. // Выполните какие-либо дополнительные настройки после загрузки представления, обычно из пера.
    4. }

    Шаблонная реализация этого метода включает комментарий. Вам не нужен этот комментарий в реализации вашего метода, поэтому удалите его.

  2. Под строкой super.viewDidLoad () добавьте пустую строку и следующее:

    1. // Обработка пользовательского ввода текстового поля через обратные вызовы делегатов.
    2. nameTextField.delegate = self

    self относится к классу ViewController , потому что ссылка на него находится внутри области определения класса ViewController .

    Вы можете добавлять свои собственные комментарии, чтобы понять, что происходит в вашем коде.

Ваш метод viewDidLoad () должен выглядеть так:

  1. функция отмены viewDidLoad () {
  2. супер.viewDidLoad ()
  3. // Обработка пользовательского ввода текстового поля через обратные вызовы делегатов.
  4. nameTextField.delegate = self
  5. }

Когда экземпляр ViewController загружается, он устанавливает себя как делегат своего свойства nameTextField .

Протокол UITextFieldDelegate определяет восемь дополнительных методов.Просто реализуйте те, которые вам нужны, чтобы добиться желаемого поведения. На данный момент вам нужно реализовать два из этих методов:

  1. func textFieldShouldReturn (_ textField: UITextField) -> Bool
  2. func textFieldDidEndEditing (_ textField: UITextField)

Чтобы понять, когда вызываются эти методы и что они должны делать, важно знать, как текстовые поля реагируют на пользовательские события. Когда пользователь касается текстового поля, он автоматически становится первым респондентом.В приложении первый респондент - это объект, который первым на линии принимает многие виды событий приложения, включая ключевые события, события движения и сообщения действий, среди прочего. Другими словами, многие события, генерируемые пользователем, первоначально направляются первому респонденту.

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

Когда пользователь хочет завершить редактирование текстового поля, текстовое поле должно отказаться от своего статуса первого респондента. Поскольку текстовое поле больше не будет активным объектом в приложении, события необходимо перенаправлять на более подходящий объект.

Здесь вступает в силу ваша реализация методов UITextFieldDelegate . Вам необходимо указать, что текстовое поле должно отказаться от своего статуса первого респондента, когда пользователь нажимает кнопку, чтобы завершить редактирование в текстовом поле.Вы делаете это в методе textFieldShouldReturn (_ :) , который вызывается, когда пользователь нажимает Return (или, в данном случае, Done) на клавиатуре.

Для реализации метода протокола UITextFieldDelegate textFieldShouldReturn (_ :)

  1. В ViewController.swift , прямо над разделом // MARK: Actions , добавьте следующее:

    1. // МАРКА: UITextFieldDelegate

    Этот комментарий используется для организации вашего кода и помощи вам (и всем, кто читает ваш код) в навигации по нему.

    Вы уже добавили несколько таких комментариев. Xcode перечисляет каждый из этих комментариев как заголовок раздела в меню функций файла исходного кода, которое появляется, если вы щелкаете имя файла в верхней части области редактора. Меню функций позволяет быстро перейти к разделу кода. Вы увидите разделы, обозначенные вами как // MARK: , перечисленные здесь. Вы можете щелкнуть один из заголовков раздела, чтобы перейти к этому разделу в файле.

  2. Под комментарием добавьте следующий метод:

    1. func textFieldShouldReturn (_ textField: UITextField) -> Bool {
    2. }
  3. В этом методе добавьте следующий код, чтобы отказаться от статуса первого респондента текстового поля, и комментарий, чтобы описать, что делает код:

    1. // Скрыть клавиатуру.
    2. textField.resignFirstResponder ()

    Попробуйте ввести вторую строку вместо простого копирования и вставки. Вы обнаружите, что автозавершение кода - одна из замечательных функций Xcode, позволяющих экономить время. Когда Xcode отобразит список возможных завершений, прокрутите список, пока не найдете тот, который вам нужен, а затем нажмите Return. Xcode вставляет за вас всю строку.

  4. В этом методе добавьте следующую строку кода:

    Этот метод возвращает логическое значение, указывающее, должна ли система обрабатывать нажатие клавиши Return.В этом случае вы всегда хотите ответить пользователю, нажав клавишу Return, поэтому просто верните true .

Ваш метод textFieldShouldReturn (_ :) должен выглядеть так:

  1. func textFieldShouldReturn (_ textField: UITextField) -> Bool {
  2. // Скрыть клавиатуру.
  3. textField.resignFirstResponder ()
  4. возврат верно
  5. }

Второй метод, который вам необходимо реализовать, textFieldDidEndEditing (_ :) , вызывается после того, как текстовое поле отказывается от своего статуса первого респондента.Поскольку вы отказываетесь от статуса первого респондента в textFieldShouldReturn , система вызывает этот метод сразу после вызова textFieldShouldReturn .

Метод textFieldDidEndEditing (_ :) дает вам возможность прочитать информацию, введенную в текстовое поле, и что-то с ней сделать. В вашем случае вы возьмете текст, который находится в текстовом поле, и воспользуетесь им для изменения значения вашего ярлыка.

Для реализации метода протокола UITextFieldDelegate textFieldDidEndEditing (_ :)

  1. В ViewController.swift , после метода textFieldShouldReturn (_ :) добавьте следующий метод:

    1. func textFieldDidEndEditing (_ textField: UITextField) {
    2. }
  2. В этом методе добавьте следующую строку кода:

    1. foodNameLabel.text = textField.text

Это все, что вам нужно сделать, чтобы увидеть результат.Ваш метод textFieldDidEndEditing (_ :) должен выглядеть так:

  1. func textFieldDidEndEditing (_ textField: UITextField) {
  2. foodNameLabel.text = textField.text
  3. }

Контрольная точка: Проверьте свои изменения, запустив симулятор. Вы можете выбрать текстовое поле и ввести в него текст. Когда вы нажимаете кнопку «Готово» на клавиатуре, клавиатура закрывается, и текст метки изменяется, отображая текст в текстовом поле.Когда вы нажимаете кнопку «Установить текст метки по умолчанию», метка меняется с того, что в настоящее время отображается в метке, на Текст по умолчанию (значение, установленное действием, которое вы определили ранее).

Заключение

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

Примечание

Чтобы увидеть завершенный пример проекта для этого урока, загрузите файл и просмотрите его в Xcode.

Загрузка файла

.

ios - Как подключить розетку из раскадровки к классу UITableViewCell Xcode 11

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

От торговых точек к действиям: создание IBAction

Я сказал, что мы вернемся к Interface Builder, и теперь время пришло: мы собираемся связать действие «касания» наших UIButtons с некоторым кодом. Итак, выберите Main.storyboard, затем перейдите в помощник редактора, чтобы вы могли видеть код рядом с макетом.

Предупреждение: , пожалуйста, внимательно прочтите следующий текст. В спешке я все время лажаю и не хочу, чтобы это вас смущало!

Выберите первую кнопку, затем Ctrl + перетащите от нее вниз на место в коде сразу после окончания метода askQuestion () .Если вы все делаете правильно, вы должны увидеть всплывающую подсказку «Вставить выход, действие или коллекцию выходов». Когда вы отпустите, вы увидите то же всплывающее окно, которое вы обычно видите при создании розеток, но вот загвоздка: не выбирает розетку .

Правильно: там, где в верхней части всплывающего окна написано «Connection: Outlet», я хочу, чтобы вы изменили это на «Action». Если вы выберете здесь Outlet (что я делаю слишком часто, потому что я тороплюсь), вы создадите проблемы для себя!

Когда вы выбираете действие вместо выхода, всплывающее окно немного меняется.У вас по-прежнему будут спрашивать имя, но теперь вы увидите поле «Событие», а поле «Тип» изменилось с UIButton на Any . Пожалуйста, измените Тип обратно на UIButton , затем введите , нажмите в качестве имени и нажмите Подключиться.

Вот что Xcode напишет для вас:

  @IBAction func buttonTapped (_ отправитель: UIButton) { }  

… и снова обратите внимание на серый круг с кольцом вокруг него слева, означающий, что у него есть соединение в Interface Builder.

Прежде чем мы посмотрим, что это делает, я хочу, чтобы вы установили еще две связи. На этот раз все немного по-другому, потому что мы подключаем две другие кнопки-флажки к тому же методу buttonTapped () . Для этого выберите каждую из оставшихся двух кнопок, затем перетащите с нажатой клавишей Ctrl на только что созданный метод buttonTapped () . Весь метод станет синим, что означает, что он будет подключен, поэтому вы можете просто отпустить, чтобы это произошло. Если метод мигает после того, как вы отпустите, это означает, что соединение было установлено.

Итак, что у нас есть? Итак, у нас есть единственный метод под названием buttonTapped () , который подключен ко всем трем UIButton s. Событие, используемое для вложения, называется TouchUpInside , что в iOS является способом сказать: «пользователь коснулся этой кнопки, затем отпустил палец, пока он все еще находился над ней», то есть кнопка была нажата.

Опять же, Xcode вставил атрибут в начало этой строки, чтобы он знал, что это относится к Интерфейсному Разработчику, и на этот раз это @IBAction . @IBAction похож на @IBOutlet , но идет другим путем: @IBOutlet - это способ подключения кода к макетам раскадровки, а @IBAction - способ создания кода запуска раскадровки макетов.

Этот метод принимает один параметр, называемый отправитель . Это тип UIButton , потому что мы знаем, что будет вызывать метод. И это важно: все три кнопки вызывают один и тот же метод, поэтому важно, чтобы мы знали, какая кнопка была нажата, чтобы мы могли судить, был ли ответ правильным.

Но как мы узнаем, была ли нажата правильная кнопка? Прямо сейчас все кнопки выглядят одинаково, но за кулисами все представления имеют специальный идентификационный номер, который мы можем установить, называемый его тегом. Это может быть любое число, которое вы хотите, поэтому мы дадим нашим кнопкам номера 0, 1 и 2. Это не совпадение: наш код уже настроен на установку флагов 0, 1 и 2 на эти кнопки, поэтому если мы дадим им одинаковые теги, мы точно знаем, какой флаг был нажат.

Выберите второй флаг (не первый!), Затем посмотрите в инспекторе атрибутов (Alt + Cmd + 4) на поле ввода, помеченное Tag.Возможно, вам придется прокрутить вниз, потому что UIButton имеют множество свойств, с которыми можно работать! Как только вы найдете его (это примерно две трети пути вниз, чуть выше свойств цвета и альфа), убедитесь, что он установлен на 1.

Теперь выберите третий флаг и установите его тег равным 2. Нам не нужно изменять тег первого флага, потому что по умолчанию 0.

На данный момент мы закончили с Interface Builder, поэтому вернитесь в стандартный редактор и выберите ViewController.swift - пора закончить заполнением содержимого метода buttonTapped () .

Этот метод должен делать три вещи:

  1. Проверьте правильность ответа.
  2. Увеличьте или уменьшите счет игрока.
  3. Показать сообщение, сообщающее им, каков их новый счет.

Первая задача довольно проста, потому что каждая кнопка имеет тег, соответствующий ее положению в массиве, и мы сохранили позицию правильного ответа в переменной rightAnswer .Итак, ответ правильный, если sender.tag равно correctiveAnswer .

Вторая задача также проста, потому что вы уже встречали оператор + = , который добавляет к значению. Мы будем использовать это и его аналог, - = , для добавления или вычитания баллов по мере необходимости. Третья задача более сложная, поэтому мы подойдем к ней через минуту.

Поместите этот код в buttonTapped () method:

  var title: Строка если отправитель.tag == rightAnswer { title = "Правильно" оценка + = 1 } else { title = "Неправильно" оценка - = 1 }  

Теперь самое сложное: мы собираемся использовать новый тип данных под названием UIAlertController () . Это используется для отображения предупреждения с параметрами для пользователя. Чтобы это сработало, вам нужно будет использовать укупорочное средство - то, о чем вы узнали в теории, но, наконец, наконец, применили на практике.

Если вы помните, замыкания - это особый вид блока кода, который можно использовать как переменную - Swift буквально берет копию блока кода, чтобы его можно было вызвать позже.Swift также копирует все, что упоминается внутри кода, поэтому вам нужно быть осторожным при их использовании. Позже мы собираемся широко использовать замыкания, а пока воспользуемся двумя сокращениями.

Введите это непосредственно перед концом кнопки buttonTapped () method:

  let ac = UIAlertController (title: title, message: «Ваша оценка \ (оценка).», Предпочтительный стиль: .alert) ac.addAction (UIAlertAction (заголовок: «Продолжить», стиль: по умолчанию, обработчик: askQuestion)) присутствует (ac, animated: true)  

Этот код на мгновение вызовет ошибку, но это нормально.

Переменная title была установлена ​​в нашем выражении if как "правильная" или "неправильная", и вы уже узнали об интерполяции строк, поэтому первое, что изменилось, - это параметр .alert , используемый для . предпочтительный стиль . UIAlertController () дает нам два типа стилей: .alert , который открывает окно сообщения в центре экрана, и .actionSheet , который сдвигает варианты вверх снизу.Они похожи, но Apple рекомендует использовать .alert , сообщая пользователям об изменении ситуации, и .actionSheet , когда их просят выбрать из набора параметров.

Во второй строке используется тип данных UIAlertAction для добавления кнопки к предупреждению с надписью «Продолжить» и придания ему стиля «по умолчанию». Существует три возможных стиля: .default , .cancel и .destructive . Как они выглядят, зависит от iOS, но важно, чтобы вы использовали их правильно, потому что они предоставляют пользователям тонкие подсказки пользовательского интерфейса.

Жало в хвосте находится в конце этой строки: обработчик: askQuestion . Параметр обработчика ищет закрытие, то есть некоторый код, который он может выполнить при нажатии кнопки. Вы можете написать здесь собственный код, если хотите, но в нашем случае мы хотим, чтобы игра продолжалась при нажатии кнопки, поэтому мы передаем askQuestion , чтобы iOS вызывала наш метод askQuestion () .

Предупреждение: Мы должны использовать askQuestion , а не askQuestion () .Если вы используете первый, это означает «вот имя метода для запуска», но если вы используете второй, это означает «запустите метод askQuestion () сейчас, и он сообщит вам имя метода, который нужно запустить. . "

Есть много веских причин для использования замыканий, но в приведенном здесь примере просто передача askQuestion - это изящный ярлык, хотя он и ломает то, что нам нужно исправить в ближайшее время.

Последняя строка вызывает present () , который принимает два параметра: контроллер представления для представления и необходимость анимации презентации.У него есть необязательный третий параметр, который является еще одним закрытием, которое должно быть выполнено после завершения анимации презентации, но здесь нам это не нужно. Мы отправляем наш UIAlertController для первого параметра и true для второго, потому что анимация всегда хороша.

Прежде чем код завершится, возникает проблема, и Xcode, вероятно, сообщает вам, что это такое: «Невозможно преобразовать значение типа‘ () -

.

Смотрите также