Проблемы, вызванные кнопкой - PullRequest
0 голосов
/ 05 мая 2018

Я возвращаю данные из secondVC в firstVC и показываю их в текстовом поле.

Мой ВК - это FirstVC с текстовым полем, а второй - с кнопкой.

Поток моего VC - это когда пользователь нажимает на текстовое поле (здесь вызывается действие текстового поля Editing Did Begin), затем открывается второй VC. И затем, когда кнопка нажимает на secondVC, затем возвращается к firstVC с некоторыми данными, и данные будут отображаться в том же текстовом поле.

Так что все вышеперечисленное работает нормально.

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

Проблема в том, что теперь текстовое поле содержит данные. Когда я нажимаю на нее, она не работает из-за свойства действия кнопки Editing Did Begin.

Как с этим справиться?

Ниже мой код,

Первый ВК

import UIKit

class firstViewController: UIViewController, UITextFieldDelegate, MyProtocol {

var valueSentFromSecondViewController                   : String?
@IBOutlet weak var myTextField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}



@IBAction func myTextFieldACTIONWhenEditingDidBegin(_ sender: Any) {
    myTextField.isUserInteractionEnabled = false
    let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "secondViewController") as! secondViewController

    secondVC.delegate = self
    self.navigationController?.pushViewController(secondVC, animated: true)
}

func setResultsAfterEvaluation(valueSent: String) {
    self.valueSentFromSecondViewController = valueSent
    print(valueSentFromSecondViewController!)
    myTextField.text = valueSent
    //print(valueSent)

}
}

Второй ВК

import UIKit

protocol MyProtocol {
func setResultsAfterEvaluation(valueSent: String)

}

class secondViewController: UIViewController {
var delegate            :   MyProtocol?
var sentValue           :   String?
override func viewDidLoad() {
    super.viewDidLoad()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func btn(_ sender: Any) {
    sentValue = "Ahtazaz"
    delegate?.setResultsAfterEvaluation(valueSent: sentValue!)
    self.navigationController?.popViewController(animated: true)

}

}

1 Ответ

0 голосов
/ 05 мая 2018

Я считаю, что это более простой способ сделать то, что вы пытаетесь достичь, так как он не включает протоколы и дополнительные функции. Если у вас есть какие либо вопросы, пожалуйста спрашивайте. :)

Контроллер первого вида:

import UIKit
//By declaring a variable outside of any class, it is always active in memory and accessible anywhere.
var textFieldText: String = ""

class ViewController1: UIViewController, UITextFieldDelegate {

@IBOutlet weak var textField1: UITextField!

func textFieldDidBeginEditing(_ textField: UITextField) { 
//textField.resignFirstResponder is used to dismiss the keyboard.  By putting it in this function, it hides the keyboard, which prevents users from entering custom text into your text field.
    textField.resignFirstResponder()
    let VC2 = self.storyboard?.instantiateViewController(withIdentifier: "ViewController2") as! ViewController2
    self.navigationController?.pushViewController(VC2, animated: true) 
}

override func viewDidLoad() {
    super.viewDidLoad()
//This links textField1 on your storyboard to the textFieldDidBeginEditing function.
    textField1.delegate = self
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
//Every time the view is about to appear, this is called.  This is where we update the text field's text.
    textField1.text = textFieldText
}
}

Контроллер второго вида:

import UIKit

class ViewController2: UIViewController {

@IBOutlet weak var button1: UIButton!
@IBOutlet weak var button2: UIButton!

//If the data you are trying to pass is the button's title, use these two functions.
@IBAction func button1Tapped(_ sender: UIButton) {
    textFieldText = (button1.currentTitle)!
    self.navigationController?.popViewController(animated: true)
}

@IBAction func button2Tapped(_ sender: UIButton) {
    textFieldText = (button2.currentTitle)!
    self.navigationController?.popViewController(animated: true)
} 

//If the data you are trying to pass is not the button's title, use these.
@IBAction func button1Tapped(_ sender: UIButton) {
    textFieldText = "Your Text Here"
    self.navigationController?.popViewController(animated: true)
}

@IBAction func button2Tapped(_ sender: UIButton) {
    textFieldText = "Your Text Here"
    self.navigationController?.popViewController(animated: true)
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...