Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Создание завершенного приложения xcode

Цели работы:1. Получить практику применения процедур и функций для работы.

1. Задание по лабораторной работе

1.1. Калькулятор в iOS8 на Swift.

Ввод, отладка и выполнение разработанной программы.

2. Методические указания

2.1. В классе ПЭВМ студенты самостоятельно под руководством преподавателя выполняют п. 3 настоящего задания.

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

2.3. Текст отлаженной программы необходимо сохранить на сменный носитель и отразить в отчете на ЛР.

3. Выполнение работы

3.1.Открываем Xcode, создаем новый проект и выбираем Single View Application. В названии пишем Calculator, остальное оставляем как обычно.

Сохраняем проект в папку и приступаем к работе. Давайте сразу создадим внешний интерфейс. Переходим в файл Main.storyboard и скрываем, мешающую нам, левую панель.

В файле Main.storyboard давайте отключим Size Classes, нам это пока не к чему. Выберите наше представление View Controller, в панели свойств во вкладке Show the File inspectorснимите галочку с пункта Use Size Classes.

Xcode предложит выбрать целевое устройство для нашего проекта, оставляем Iphone и нажимаем DisableSize Classes.

Наше представление стало привычной формой. Можно продолжать работать.

Создаем внешний интерфейс

Давайте сначала разместим кнопки на экране. Создадим:

  1. Десять кнопок под цифры (0..9);
  2. Три кнопки под операции;
  3. Кнопку под очистку информационного поля;
  4. Объект Label под вывод.

Из библиотеки объектов перетащите кнопку на ваше представление. Перейдите в свойствах на вкладку в виде линейки (Show the size inspector) и измените размер кнопки. Если вы создаете собственный дизайн, то ставьте другие значения, я установил размер ширины и высоты в 66.

Изменим еще фон кнопки и цвет текста на ней. В атрибутах кнопки в качестве Background (раздел view) устанавливаем оранжевый цвет, а в поле Text Color (раздел Button) устанавливаем черный цвет.

Получилась квадратная, оранжевая кнопка. Но нам нужно еще девять таких. Чтобы не создавать все заново, давайте просто копированием размножим нашу кнопку до нужного количества. Чтобы скопировать в Xcode, достаточно выделить элемент, зажать кнопку Alt и левой кнопкой мышки перетянуть в сторону дублированный объект. Можно создать четыре кнопки, выставить так, как нам нужно и далее уже копировать целый ряд.

Измените название кнопок должным образом:

Для кнопок с операциями я увеличил шрифт, иначе текст слишком маленький:

Теперь добавьте объект Label на наше представление. Растяните его на весь экран.

Теперь в свойствах измените текст на цифру 0, и выставьте контекст по центру (атрибут Alignment). Также измените цвет фона на черный и измените значение прозрачности(Alpha) на 0.7. Я еще увеличил шрифт до 50 (атрибут Font). Все эти действия показаны на картинке ниже:

Вот что мы получили:

Создаем связь

Нажмите на кнопку Show the Assistant editorдля открытия помощника редактора. Давайте поговорим об Outlet и Action.

Не нужно пока вникать в теорию, пока вам хватит следующих знаний:

  • Action используют тогда, когда хотят совершить какие-либо действия объектом;
  • Outlet используют в том случае, если хотят с помощью кода изменить объект.

Так как мы хотим выводить значения по нажатию на кнопки в объект Label, то нам нужно сделать связь с помощью Outlet.

Мы уже проходили несколько способов создания связи, выбирать вам. Можно нажать правой кнопкой на объекте Label и перетянуть стрелку в верхнюю часть файла ViewControlle.swift перед UIViewController:

В выпадающем окне проверьте, чтобы ваши данные совпадали с данными ниже:

  1. Connection: Outlet;
  2. Name: Display;
  3. Type: UILabel;
  4. Storage: Weak.

Теперь делаем связь с нашими кнопками. Не спешите создавать десятки связей, сначала посморите как это делаю я:

Правой кнопкой нажимаем на кнопку с номером 1 и перетягиваем стрелочку в конец файла ViewController.swift.

В выпадающем окне заполняем поля следующим образом:

  1. Connection: Action;
  2. Name: Numbers;
  3. Type: UIButton;
  4. Event: Touch Up Inside;
  5. Arguments: Sender.

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

Повторяем данное действие для кнопок 1,2,…,9,0. Как проверить, что метод связан со всеми кнопками? Да очень просто, просто наведите мышкой в файле ViewController.swift на закрашенный кружок напротив метода Numbers, в представлении на кнопках отобразится информация:

Что мы все создаем и создаем… давайте бросим все и запустим проект? В качестве эмулятора выбираем Iphone 5и нажимаем на Run:

По-моему, выглядит неплохо:

У меня к вам вопрос: Если мы запустим проект, скажем, на Iphone 4s, почему кнопки не будут находиться так, как мы их установили на экране? Попробуйте исправить это самостоятельно. Если возникнут вопросы, ты спрашивайте в группе (ссылку можно найти в подвале сайта).

Добавим метод для наших операций. Выбираем операцию сложения:

Во всплывающем окне заполняем поля аналогично предыдущей связи, только в качестве названия пишем Operations:

Операцию для вычитаниядобавим в этот же метод:

Для операции равно создадим отдельный метод с названием Equals:

Остался один метод — для кнопки AC/C (All Clear/Clear). Создаем Action аналогично. В названии указываем Clear.

Все, на этом создание связей закончено, пора приступать к кодированию кнопок.

Ваш файл должен выглядеть следующим образом:

import UIKit   classViewController: UIViewController {   @IBOutletweak var Display: UILabel!   override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. }   override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBActionfunc Numbers(sender: UIButton) {   }   @IBActionfunc Operations(sender: UIButton) {   }   @IBActionfunc Equals(sender: UIButton) {   } @IBActionfunc Clear(sender: UIButton) {   } }

Кодим

Закрываем помощника редактора и открываем файл ViewController.swift.

Сразу после @IBOutlet weak var Display: UILabel! добавляем переменные:

var FlagNumber = false var firstNumber = 0 var secondNumber = 0 var operation = ""

Как вы помните, с помощью var мы обозначаем переменные, с помощью let — константы.

Теперь в методе Numbes вставьте следующий код:

var number = sender.currentTitle   ifFlagNumber {   ifDisplay.text != nil&& number != nil{   Display.text = Display.text! + number!   }   } else{   Display.text = number FlagNumber = true   }

При создании переменной number, с помощью sender.currentTitle мы обращаемся к нашей надписи на кнопке. Сначала разберем что находится внутри конструкцииif-else, потом расскажу зачем она вообще нужна.

Во-первых, обратим внимание на строку:

Display.text = Display.text! + number!

Как мы помним, с помощью Outlet мы установили связь с объектом Label и назвали метод Display. Значит через Display мы сможем достать и изменить наш объект Label. С помощью метода text мы зададим текст для нашего поля. Что означает восклицательный знак в конце записи? А попробуйте его убрать. Почитайте ошибку. Ставя знак (!) мы говорим, что наше поле или переменная имеют значение — они непустые. Да, компилятор привередливый. Нужно быть точно уверенным, что переменная number или значения нашего поля — Display.text непустое, иначе компилятор вызовет ошибку времени исполнения. Чуть позже вы в этом убедитесь.

Запись number! имеет значение типа boolean при сравнивании с nil, то есть возвращает true если запись пустая, и false если содержит какие-либо значения. Именно поэтому мы делаем проверку:

ifDisplay.text != nil&& number != nil{   // Если поля не пустые, то все нормально, работаем дальше   ...   }

Символ && означает andили и, как вам удобно. Те есть мы проверяем два условия: Display.text != nilиnumber != nil.

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

Отлично, с этим мы разобрались, теперь давайте выясним что же делает метод Numbers. Когда мы нажимаем на кнопку, то получаем значение от 0 до 9, но как получить значение, скажем 335? Для этого мы используем следующий код:

Display.text = Display.text! + number!

То есть мы к предыдущему значению прибавляем новое значение с помощью sender.currentTitle. Переменная FlagNumber будет отделять нажатие на цифру от нажатия на операцию. То есть пока не нажата операция, мы будет соединять все нажатые цифры(таким образом, мы получаем двух, трех… -значные числа).

Полностью метод Number будет выглядеть следующим образом:

@IBActionfunc Numbers(sender: UIButton) {   var number = sender.currentTitle   ifFlagNumber {   ifDisplay.text != nil&& number != nil{   Display.text = Display.text! + number!   }   } else{   Display.text = number FlagNumber = true   }   }

Переходим к методу Operations. Опять же, вставляем код и будем разбираться:

ifDisplay.text!.toInt() != nil{   firstNumber = Display.text!.toInt()!   }   FlagNumber = false   ifsender.currentTitle != nil{   operation = sender.currentTitle!   }

Ну тут все проще:

ifDisplay.text!.toInt() != nil{   firstNumber = Display.text!.toInt()!   }

Проверяем, если значение в нашем поле Label не пустое (то есть у нас есть первое число), то присваиваем значение этого поля в переменную firstNumber.

Далее устанавливаем значение переменной FlagNumber в false чтобы в методе Numbers при нажатии на цифру выводилось новое числа, а не прибавлялось к первому.

Далее смотрим, если значение в надписи кнопки не пустое, то прибавляем его переменной operation:

ifsender.currentTitle != nil{   operation = sender.currentTitle!   }

Полный код нашего метода Operationsбудет следующим:

@IBActionfunc Operations(sender: UIButton) {   ifDisplay.text!.toInt() != nil{   firstNumber = Display.text!.toInt()!   }   FlagNumber = false   ifsender.currentTitle != nil{   operation = sender.currentTitle!   }   }

Разбираем метод Equals.

FlagNumber = false var result = 0   ifDisplay.text!.toInt() != nil{ secondNumber = Display.text!.toInt()!   }   ifoperation == "+"{ result = firstNumber + secondNumber   }elseifoperation == "-"{ result = firstNumber - secondNumber }   Display.text = "\(result)"

Устанавливаем переменную FlagNumber в false, так как следующие число должно создаваться заново. Проверяем, если значение поля непустое, то присваиваем его переменной secondNumber.

ifDisplay.text!.toInt() != nil{   secondNumber = Display.text!.toInt()!   }

Ну а дальше все понятно, если выбрана операцию сложения ты выполняется сложение между двумя переменными, если выполняется вычитание, то выполняется вычитание.

Метод Equals целиком:

@IBActionfunc Equals(sender: UIButton) { FlagNumber = false var result = 0   ifDisplay.text!.toInt() != nil{   secondNumber = Display.text!.toInt()!   }   ifoperation == "+"{ result = firstNumber + secondNumber   }elseifoperation == "-"{ result = firstNumber - secondNumber }   Display.text = "\(result)"   }

И, наконец, последний метод Clear:

FlagNumber = false   Display.text = "0"   var firstNumber = 0   var secondNumber = 0

Тут все очень просто, для того, чтобы очистить окно, нужно присвоить нашему полю исходное значение 0:

Display.text = "0"

Устанавливаем переменную FlagNumber в false, так как мы начинаем ввод цифр заново. И обнуляем переменные.

Метод Clearцеликом:

@IBActionfunc Clear(sender: UIButton) { FlagNumber = false var firstNumber = 0 var secondNumber = 0 Display.text = "0" }

Можете запустить свое приложение и наслаждаться отлично проделанной работой.

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

В методе Clear очистите значение в Display.text = «0», написав Display.text = «».

Теперь в методе Operations вместо

ifDisplay.text!.toInt() != nil{   firstNumber = Display.text!.toInt()!   }

Напишите

firstNumber = Display.text!.toInt()!

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

 

3.2.Ввести разработанную программу в ПЭВМ.

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

3.4.Сделать выводы, оформить отчет и представить его преподавателю.

 

Лабораторная работа №9

Последнее изменение этой страницы: 2016-07-23

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...