Задать вопрос
SnapSh0t
@SnapSh0t
iOS-Developer

Как настроить 1 PickerView на 2 UITextFiled Swift 3?

Здравствуйте! Есть 1 пикер и 2 UITextField, при выбор значения в одном из TextField - он дублируется одновременно и в другой. Как изменить код так, чтобы в этих ячейках можно было выбирать разные значения? Заранее спасибо за уделенное время.
158cccee1e6245c0b2560e5a3b6c8a19.png
//
//  AddNewShipTableViewController.swift
//  GreenWorld
//
//  Created by Aleksandr Govorukhin on 08.05.17.
//  Copyright © 2017 Aleksandr Govorukhin. All rights reserved.
//

import UIKit
import CoreData

class AddNewShipTableViewController: UITableViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITextFieldDelegate, UIPickerViewDataSource, UIPickerViewDelegate {
    
    @IBAction func backToAddNewShip(segue: UIStoryboardSegue) {
        
    }
    
    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var nameShip: UITextField!
    @IBOutlet weak var organization: UITextField!
    @IBOutlet weak var inspectionDate: UITextField!
    @IBOutlet weak var deadweight: UITextField!
    @IBOutlet weak var grossTonnage: UITextField!
    @IBOutlet weak var diesel: UITextField!
    @IBOutlet weak var contractYear: UITextField!
    @IBOutlet weak var constructionYear: UITextField!
    @IBOutlet weak var deliveryDate: UITextField!
    
    var answerYears = ["1980", "1981", "1982", "1983", "1984", "1985", "1986", "1987", "1988", "1989", "1990", "1991", "1992", "1993", "1994", "1995", "1996", "1997", "1998", "1999", "2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020"]
    
    
    var reportNOx: String!
    var reportSOx: String!
    var reportCO2: String!
    var reportBallastWater: String!

    override func viewDidLoad() {
        super.viewDidLoad()

        //Получение сегодняшней даты в String
        let date = NSDate() // Get Todays Date
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "dd-MM-yyyy"
        let stringDate: String = dateFormatter.string(from: date as Date)
        inspectionDate.text = stringDate
        
        //Установка делегата на текстовое поле
        constructionYear.delegate = self
        contractYear.delegate = self
        
        //Добавление кнопки Done
        let pickerView = UIPickerView()
        pickerView.delegate = self
        contractYear.inputView = pickerView
        constructionYear.inputView = pickerView
        
        
        let toolBar = UIToolbar(frame: CGRect(x: 0, y: self.view.frame.size.height/6, width: self.view.frame.size.width, height: 40.0))
        
        toolBar.layer.position = CGPoint(x: self.view.frame.size.width/2, y: self.view.frame.size.height-20.0)
        
        let doneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: self, action: #selector(AddNewShipTableViewController.donePressed))
        
        let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: self, action: nil)
        
        let label = UILabel(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width / 3, height: self.view.frame.size.height))
        
        let textBtn = UIBarButtonItem(customView: label)
        
        toolBar.setItems([flexSpace,textBtn,flexSpace,doneButton], animated: true)
        
        constructionYear.inputAccessoryView = toolBar
        contractYear.inputAccessoryView = toolBar
        nameShip.inputAccessoryView = toolBar
        organization.inputAccessoryView = toolBar
        inspectionDate.inputAccessoryView = toolBar
        deadweight.inputAccessoryView = toolBar
        grossTonnage.inputAccessoryView = toolBar
        
        //Скрываем клавиатуру
//        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(AddNewShipTableViewController.dismissKeyboard))
//        
//        view.addGestureRecognizer(tap)

    }
    
    //Добавление кнопки Done 
    func donePressed(_ sender: UIBarButtonItem) {
        
        constructionYear.resignFirstResponder()
        contractYear.resignFirstResponder()
        nameShip.resignFirstResponder()
        organization.resignFirstResponder()
        inspectionDate.resignFirstResponder()
        deadweight.resignFirstResponder()
        grossTonnage.resignFirstResponder()
        
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
    }
    
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return answerYears.count
    }
    
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        
        return answerYears[row]
    }
    
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        contractYear.text = answerYears[row]
        constructionYear.text = answerYears[row]
    }


    //Функция скрытия клавиатуры
    func dismissKeyboard() {
        view.endEditing(true)
    }
    
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    
    //Добавление действия на 1 ячейку
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if indexPath.row == 0 {
            if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
                let imagePicker = UIImagePickerController()
                imagePicker.delegate = self
                imagePicker.allowsEditing = false
                imagePicker.sourceType = .photoLibrary
                
                self.present(imagePicker, animated: true, completion: nil)
            }
        }
        
        tableView.deselectRow(at: indexPath, animated: true)
    }
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        //Запоминаем выбранное изображение
        imageView.image = info[UIImagePickerControllerOriginalImage] as? UIImage
        imageView.contentMode = .scaleAspectFill
        imageView.clipsToBounds = true
        
        dismiss(animated: true, completion: nil)
    }
    
    //Добавление кнопки Done
    func doneButtonAction()
    {
        view.endEditing(true)
    }


        
    //Реализация кнопки "Сохранить"
    @IBAction func saveNewShip() {
        
        //Проверка заполненность всех полей
        var error = ""
        if (nameShip.text?.isEmpty)! {
            error = "'Название судна'"
        } else if (organization.text?.isEmpty)! {
            error = "'Организация'"
        } else if (deadweight.text?.isEmpty)! {
            error = "'Дедвейт'"
        } else if (grossTonnage.text?.isEmpty)! {
            error = "'Гросс-тонаж'"
        } else if (diesel.text?.isEmpty)! {
            error = "'Дизель'"
        } else if (contractYear.text?.isEmpty)! {
            error = "'Дата контракта'"
        } else if (constructionYear.text?.isEmpty)! {
            error = "'Дата постройки'"
        } else if (deliveryDate.text?.isEmpty)! {
            error = "'Навигация'"
        }
        
        if error != "" {
            let alertController = UIAlertController(title: "Ошибка", message: "Сохранение не удалость, потому что поле \(error) не заполненно", preferredStyle: .alert)
            let okAction = UIAlertAction(title: "Хорошо", style: .default, handler: nil)
            
            alertController.addAction(okAction)
            
            self.present(alertController, animated: true, completion: nil)
            
            return
        }
        
        //Реализация рассчета дипломной работы
        //Расчет NOx
    
        
        if Int(constructionYear.text!)! > 2000 && Int(constructionYear.text!)! < 2010 {
            reportNOx = "NOx требуется 1 Уровень"
        } else if Int(constructionYear.text!)! > 2011 {
            reportNOx = "NOx требуется 2 Уровень"
        } else if Int(constructionYear.text!)! < 2000 {
            reportNOx = "Нет требований NOx"
        }
        
        //Расчет SOx
        reportSOx = "IMO: 0.1% S ограничение на все зоны контроля выбросов (ECA)\n0.5% S ограничение во всем мире с 2020\nEU: 0.1% S ограничение во всех портах\nChina:Тяньцзин/Далянь/Море Бохай; Гонконг/Гуанчжоу; и Шанхай: 0.5% S ограничение в основных портах с 2017; во всех портах с 2018; и на всей территории с 2019"
        
        reportCO2 = "Требуется план управления энергопотреблением судна (SEEMP). Требуется расчетный индекс эффективности энергопотребления (EEDI)."
        
        //Расчет Ballast Water
        reportBallastWater = "IMO: Система очистки балластных вод требует от IOPP (Международный протокол от загрязнения нефтью) продление срока до 2022/05/15\nUS: Очистка балластной воды требуется из первого планового докования, после 2016.01.01 (Если продление предоставлено береговой охраной США) "
        
        let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
        let ship = Ship(context: context) // Link Task & Context
        ship.image = UIImagePNGRepresentation(imageView.image!)! as NSData
        ship.nameShip = nameShip.text!
        ship.organization = organization.text!
        ship.inspectionDate = inspectionDate.text!
        ship.reportNOx = reportNOx
        ship.reportSOx = reportSOx
        ship.reportBallastWater = reportBallastWater
        ship.reportCO2 = reportCO2
        
        
        (UIApplication.shared.delegate as! AppDelegate).saveContext()
        
        performSegue(withIdentifier: "myUnwindAction", sender: self)

    }
    
}
  • Вопрос задан
  • 806 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
ManWithBear
@ManWithBear
Swift Adept, Prague
Вы один и тот же пикер присваиваете двум разным полям. Сделайте два разных пикера.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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