mirror of
https://github.com/hmalik144/EasyCC_iOs_-legacy-.git
synced 2026-01-31 02:41:48 +00:00
Easy interface Currency Converter for iOS
This commit is contained in:
@@ -1,14 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11134" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
|
||||
<device id="retina4_7" orientation="portrait">
|
||||
<adaptation id="fullscreen"/>
|
||||
</device>
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11106"/>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
|
||||
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="tne-QT-ifu">
|
||||
<objects>
|
||||
<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<viewController id="BYZ-38-t0r" customClass="ViewController" customModule="easyCC" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
|
||||
@@ -16,11 +21,96 @@
|
||||
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="52C-6q-x8K">
|
||||
<rect key="frame" x="16" y="28" width="343" height="30"/>
|
||||
<nil key="textColor"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="BYZ-38-t0r" id="R0M-rb-xZv"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Insert Currency One" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="s4Z-H2-NTI">
|
||||
<rect key="frame" x="16" y="66" width="343" height="30"/>
|
||||
<nil key="textColor"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<textInputTraits key="textInputTraits" keyboardType="numberPad"/>
|
||||
<connections>
|
||||
<action selector="textFieldChangeListener:" destination="BYZ-38-t0r" eventType="editingChanged" id="P5a-Ve-5DY"/>
|
||||
<outlet property="delegate" destination="BYZ-38-t0r" id="Qbr-AB-HET"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="gOb-AC-a8R">
|
||||
<rect key="frame" x="16" y="104" width="343" height="30"/>
|
||||
<nil key="textColor"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="BYZ-38-t0r" id="WXh-gB-ZBs"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Insert Currency Two" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="s84-D2-Z6S">
|
||||
<rect key="frame" x="16" y="142" width="343" height="30"/>
|
||||
<nil key="textColor"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<textInputTraits key="textInputTraits" keyboardType="numberPad"/>
|
||||
<connections>
|
||||
<action selector="textChangeListenerTwo:" destination="BYZ-38-t0r" eventType="editingChanged" id="HbP-Ba-w32"/>
|
||||
<outlet property="delegate" destination="BYZ-38-t0r" id="886-rA-OY8"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<pickerView tag="1" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="yUx-aC-4ek">
|
||||
<rect key="frame" x="16" y="66" width="343" height="216"/>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="BYZ-38-t0r" id="BEc-sB-ERF"/>
|
||||
<outlet property="delegate" destination="BYZ-38-t0r" id="ap9-xn-69a"/>
|
||||
</connections>
|
||||
</pickerView>
|
||||
<pickerView tag="2" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="t8J-WK-23N">
|
||||
<rect key="frame" x="16" y="142" width="343" height="216"/>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="BYZ-38-t0r" id="8WA-hD-Udv"/>
|
||||
<outlet property="delegate" destination="BYZ-38-t0r" id="YD2-WJ-bWm"/>
|
||||
</connections>
|
||||
</pickerView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="gOb-AC-a8R" firstAttribute="top" secondItem="s4Z-H2-NTI" secondAttribute="bottom" constant="8" id="6SV-fL-Y8u"/>
|
||||
<constraint firstItem="s84-D2-Z6S" firstAttribute="top" secondItem="gOb-AC-a8R" secondAttribute="bottom" constant="8" id="Cir-UV-QMz"/>
|
||||
<constraint firstItem="gOb-AC-a8R" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leadingMargin" id="DF6-aJ-HaO"/>
|
||||
<constraint firstItem="s84-D2-Z6S" firstAttribute="trailing" secondItem="8bC-Xf-vdC" secondAttribute="trailingMargin" id="EXF-RC-KfF"/>
|
||||
<constraint firstItem="52C-6q-x8K" firstAttribute="trailing" secondItem="8bC-Xf-vdC" secondAttribute="trailingMargin" id="KwK-8r-TvX"/>
|
||||
<constraint firstItem="s4Z-H2-NTI" firstAttribute="trailing" secondItem="8bC-Xf-vdC" secondAttribute="trailingMargin" id="NGq-8J-r6P"/>
|
||||
<constraint firstItem="52C-6q-x8K" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leadingMargin" id="OqN-xN-xOw"/>
|
||||
<constraint firstItem="s4Z-H2-NTI" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leadingMargin" id="RbV-Ds-F3F"/>
|
||||
<constraint firstItem="yUx-aC-4ek" firstAttribute="top" secondItem="52C-6q-x8K" secondAttribute="bottom" constant="8" id="b4W-eV-L3k"/>
|
||||
<constraint firstItem="gOb-AC-a8R" firstAttribute="trailing" secondItem="8bC-Xf-vdC" secondAttribute="trailingMargin" id="bjg-rB-FXt"/>
|
||||
<constraint firstItem="gOb-AC-a8R" firstAttribute="top" secondItem="s4Z-H2-NTI" secondAttribute="bottom" constant="8" id="c77-lI-jFp"/>
|
||||
<constraint firstItem="t8J-WK-23N" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leadingMargin" id="cHL-nr-uDQ"/>
|
||||
<constraint firstItem="s84-D2-Z6S" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leadingMargin" id="cMG-9W-xEp"/>
|
||||
<constraint firstItem="t8J-WK-23N" firstAttribute="top" secondItem="gOb-AC-a8R" secondAttribute="bottom" constant="8" id="gRX-x6-Ibq"/>
|
||||
<constraint firstItem="yUx-aC-4ek" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leadingMargin" id="jNn-Gf-Hl0"/>
|
||||
<constraint firstItem="s4Z-H2-NTI" firstAttribute="top" secondItem="52C-6q-x8K" secondAttribute="bottom" constant="8" id="kWx-YV-NXN"/>
|
||||
<constraint firstItem="52C-6q-x8K" firstAttribute="top" secondItem="y3c-jy-aDJ" secondAttribute="bottom" constant="8" id="nq1-ii-YE0"/>
|
||||
<constraint firstItem="t8J-WK-23N" firstAttribute="trailing" secondItem="8bC-Xf-vdC" secondAttribute="trailingMargin" id="pcs-6v-nte"/>
|
||||
<constraint firstItem="yUx-aC-4ek" firstAttribute="trailing" secondItem="8bC-Xf-vdC" secondAttribute="trailingMargin" id="rac-pG-7fy"/>
|
||||
<constraint firstItem="t8J-WK-23N" firstAttribute="top" secondItem="gOb-AC-a8R" secondAttribute="bottom" constant="8" id="yyc-QF-HFD"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="currencyChoiceOne" destination="52C-6q-x8K" id="Xgb-op-nVl"/>
|
||||
<outlet property="currencyChoiceTwo" destination="gOb-AC-a8R" id="WkE-UE-YZP"/>
|
||||
<outlet property="inputOne" destination="s4Z-H2-NTI" id="zCa-zX-eVM"/>
|
||||
<outlet property="inputTwo" destination="s84-D2-Z6S" id="ij0-d7-SrY"/>
|
||||
<outlet property="spinnerOne" destination="yUx-aC-4ek" id="tVp-B2-jMc"/>
|
||||
<outlet property="spinnerTwo" destination="t8J-WK-23N" id="t80-9W-uJ2"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="117.59999999999999" y="122.78860569715144"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
</document>
|
||||
|
||||
@@ -7,11 +7,37 @@
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import Alamofire
|
||||
|
||||
class ViewController: UIViewController {
|
||||
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate{
|
||||
|
||||
@IBOutlet weak var currencyChoiceOne: UITextField!
|
||||
@IBOutlet weak var inputOne: UITextField!
|
||||
@IBOutlet weak var currencyChoiceTwo: UITextField!
|
||||
@IBOutlet weak var inputTwo: UITextField!
|
||||
@IBOutlet weak var spinnerOne: UIPickerView!
|
||||
@IBOutlet weak var spinnerTwo: UIPickerView!
|
||||
|
||||
var rateOne: String = ""
|
||||
var rateTwo: String = ""
|
||||
|
||||
var exchangeRate: Double = 1
|
||||
|
||||
var currencyList = ["AFN - Afghan Afghani","DZD - Algerian Dinar","AOA - Angolan Kwanza","ARS - Argentine Peso","AMD - Armenian Dram","AWG - Aruban Florin","AUD - Australian Dollar","AZN - Azerbaijani Manat","BSD - Bahamian Dollar","BHD - Bahraini Dinar","BDT - Bangladeshi Taka","BBD - Barbadian Dollar","BYR - Belarusian Ruble","BZD - Belize Dollar","BTN - Bhutanese Ngultrum","BTC - Bitcoin","BOB - Bolivian Boliviano","BAM - Bosnia And Herzegovina Konvertibilna Marka","BWP - Botswana Pula","BRL - Brazilian Real","GBP - British Pound","BND - Brunei Dollar","BGN - Bulgarian Lev","BIF - Burundi Franc","KHR - Cambodian Riel","CAD - Canadian Dollar","CVE - Cape Verdean Escudo","KYD - Cayman Islands Dollar","XAF - Central African CFA Franc","XPF - CFP Franc","CLP - Chilean Peso","CNY - Chinese Yuan","COP - Colombian Peso","KMF - Comorian Franc","CDF - Congolese Franc","CRC - Costa Rican Colon","HRK - Croatian Kuna","CUP - Cuban Peso","CZK - Czech Koruna","DKK - Danish Krone","DJF - Djiboutian Franc","DOP - Dominican Peso","XCD - East Caribbean Dollar","EGP - Egyptian Pound","ERN - Eritrean Nakfa","ETB - Ethiopian Birr","EUR - Euro","FKP - Falkland Islands Pound","FJD - Fijian Dollar","GMD - Gambian Dalasi","GEL - Georgian Lari","GHS - Ghanaian Cedi","GIP - Gibraltar Pound","GTQ - Guatemalan Quetzal","GNF - Guinean Franc","GYD - Guyanese Dollar","HTG - Haitian Gourde","HNL - Honduran Lempira","HKD - Hong Kong Dollar","HUF - Hungarian Forint","ISK - Icelandic Kruna","INR - Indian Rupee","IDR - Indonesian Rupiah","IRR - Iranian Rial","IQD - Iraqi Dinar","ILS - Israeli New Sheqel","JMD - Jamaican Dollar","JPY - Japanese Yen","JOD - Jordanian Dinar","KZT - Kazakhstani Tenge","KES - Kenyan Shilling","KWD - Kuwaiti Dinar","KGS - Kyrgyzstani Som","LAK - Lao Kip","LVL - Latvian Lats","LBP - Lebanese Lira","LSL - Lesotho Loti","LRD - Liberian Dollar","LYD - Libyan Dinar","MOP - Macanese Pataca","MKD - Macedonian Denar","MGA - Malagasy Ariary","MWK - Malawian Kwacha","MYR - Malaysian Ringgit","MVR - Maldivian Rufiyaa","MRO - Mauritanian Ouguiya","MUR - Mauritian Rupee","MXN - Mexican Peso","MDL - Moldovan Leu","MNT - Mongolian Tugrik","MAD - Moroccan Dirham","MZN - Mozambican Metical","MMK - Myanma Kyat","NAD - Namibian Dollar","NPR - Nepalese Rupee","ANG - Netherlands Antillean Gulden","TWD - New Taiwan Dollar","NZD - New Zealand Dollar","NIO - Nicaraguan Cordoba","NGN - Nigerian Naira","KPW - North Korean Won","NOK - Norwegian Krone","OMR - Omani Rial","TOP - Paanga","PKR - Pakistani Rupee","PAB - Panamanian Balboa","PGK - Papua New Guinean Kina","PYG - Paraguayan Guarani","PEN - Peruvian Nuevo Sol","PHP - Philippine Peso","PLN - Polish Zloty","QAR - Qatari Riyal","RON - Romanian Leu","RUB - Russian Ruble","RWF - Rwandan Franc","SHP - Saint Helena Pound","WST - Samoan Tala","STD - Sao Tome And Principe Dobra","SAR - Saudi Riyal","RSD - Serbian Dinar","SCR - Seychellois Rupee","SLL - Sierra Leonean Leone","SGD - Singapore Dollar","SBD - Solomon Islands Dollar","SOS - Somali Shilling","ZAR - South African Rand","KRW - South Korean Won","XDR - Special Drawing Rights","LKR - Sri Lankan Rupee","SDG - Sudanese Pound","SRD - Surinamese Dollar","SZL - Swazi Lilangeni","SEK - Swedish Krona","CHF - Swiss Franc","SYP - Syrian Pound","TJS - Tajikistani Somoni","TZS - Tanzanian Shilling","THB - Thai Baht","TTD - Trinidad and Tobago Dollar","TND - Tunisian Dinar","TRY - Turkish New Lira","TMT - Turkmenistan Manat","AED - UAE Dirham","UGX - Ugandan Shilling","UAH - Ukrainian Hryvnia","USD - United States Dollar","UYU - Uruguayan Peso","UZS - Uzbekistani Som","VUV - Vanuatu Vatu","VEF - Venezuelan Bolivar","VND - Vietnamese Dong","XOF - West African CFA Franc","YER - Yemeni Rial","ZMW - Zambian Kwacha"]
|
||||
|
||||
|
||||
var converstionRate:Double?
|
||||
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
self.currencyChoiceOne.text = self.currencyList[1]
|
||||
self.currencyChoiceTwo.text = self.currencyList[1]
|
||||
|
||||
self.spinnerOne.isHidden = true
|
||||
self.spinnerTwo.isHidden = true
|
||||
|
||||
// Do any additional setup after loading the view, typically from a nib.
|
||||
}
|
||||
|
||||
@@ -19,7 +45,88 @@ class ViewController: UIViewController {
|
||||
super.didReceiveMemoryWarning()
|
||||
// Dispose of any resources that can be recreated.
|
||||
}
|
||||
|
||||
@IBAction func textFieldChangeListener(_ sender: Any) {
|
||||
let valueOne = Double(inputOne.text!)
|
||||
let valueTwo = (valueOne ?? 1)*exchangeRate
|
||||
self.inputTwo.text = String(describing: valueTwo)
|
||||
}
|
||||
|
||||
@IBAction func textChangeListenerTwo(_ sender: Any) {
|
||||
let valueOne = Double(inputTwo.text!)
|
||||
let valueTwo = (valueOne ?? 1)*exchangeRate
|
||||
self.inputOne.text = String(valueTwo)
|
||||
}
|
||||
|
||||
public func numberOfComponents(in pickerView: UIPickerView) -> Int{
|
||||
return 1
|
||||
|
||||
}
|
||||
|
||||
public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
|
||||
|
||||
return currencyList.count
|
||||
|
||||
}
|
||||
|
||||
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
|
||||
|
||||
self.view.endEditing(true)
|
||||
return currencyList[row]
|
||||
|
||||
}
|
||||
|
||||
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
|
||||
|
||||
if (pickerView.tag == 1){
|
||||
self.currencyChoiceOne.text = self.currencyList[row]
|
||||
downloadData()
|
||||
self.spinnerOne.isHidden = true
|
||||
}else if(pickerView.tag == 2){
|
||||
self.currencyChoiceTwo.text = self.currencyList[row]
|
||||
downloadData()
|
||||
self.spinnerTwo.isHidden = true
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func textFieldDidBeginEditing(_ textField: UITextField) {
|
||||
|
||||
if textField == self.currencyChoiceOne {
|
||||
self.spinnerOne.isHidden = false
|
||||
//if you dont want the users to se the keyboard type:
|
||||
|
||||
textField.endEditing(true)
|
||||
}else if textField == self.currencyChoiceTwo{
|
||||
self.spinnerTwo.isHidden = false
|
||||
|
||||
textField.endEditing(true)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func downloadData() {
|
||||
Alamofire.request(urlBuilder()).responseJSON { response in
|
||||
|
||||
if let json = response.result.value as? Dictionary<String,Double> {
|
||||
self.exchangeRate = json["\(self.rateOne)_\(self.rateTwo)"]!
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func urlBuilder() -> String{
|
||||
|
||||
var url = "https://free.currencyconverterapi.com/api/v6/convert?q="
|
||||
|
||||
rateOne = String(currencyChoiceOne.text!.characters.prefix(3))
|
||||
rateTwo = String(currencyChoiceTwo.text!.characters.prefix(3))
|
||||
|
||||
url = url + rateOne + "_" + rateTwo + "&compact=ultra"
|
||||
|
||||
print(url)
|
||||
|
||||
return url
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user