我有点使abt授权迅速混乱。说,如果我想将BViewController中的文本字段的文本传递给AViewController。 (AViewController有一个标签,但是我没有放置任何文本,因此它在那里什么都没有显示。)用户完成输入并单击“ LETS GO”按钮后,AViewController中的标签文本应显示相同的文本。我实现了代码,但它给了我一些错误。谢谢。
代码:
import UIKit
class AViewController: UIViewController, BViewDelegate {
@IBOutlet weak var labelTextData: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
func userDoneInput(textData: String) {
labelTextData.text = textData
}
}
import UIKit
protocol BViewDelegate{
func userDoneInput(textData: String)
}
class BViewController: UIViewController {
@IBOutlet weak var UserInputText: UITextField!
var bViewDelegate: BViewDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func LetsGo(_ sender: UIButton) {
self.performSegue(withIdentifier: "ShowData", sender: self)
}
//use segue
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "ShowData" {
let destination = segue.destination as! AViewController
destination.labelTextData.text = UserInputText.text
}
}
}
答案 0 :(得分:1)
1- A表演
2-对B执行委托时,在此处设置委托(此代码在A内)
@IBAction func MoveToB (_ sender: UIButton) {
self.performSegue(withIdentifier: "GoToB", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "GoToB" {
let destination = segue.destination as! BViewController
destination.bViewDelegate = self
}
}
3-当您想从B返回A时(B内的这段代码)
self.bViewDelegate?.userDoneInput(textData: UserInputText.text!)
self.dismiss(animated:true,completion:nil)
4-从B到A不应有任何联系
答案 1 :(得分:0)
首先,最佳实践是不要使用序列从A返回到B(实际上,您根本没有返回,而是将A的新实例放在B之上)。有多种选择。这是三个:
在从A呈现B之前,您需要将B的委托属性设置为A(目前不这样做)。 然后你提出B 然后,当用户在B上点击“放手”时,只需调用self.dismiss(或替代方法-参见上面的选项),还可以调用self.delegate.userDoneInput(textData:)。
答案 2 :(得分:0)
这很简单:
A有一个您可以在B中编辑的标签。有两个按钮可让您前后导航。重要的是,请勿按住Ctrl键并单击“返回到A”按钮以选择A。这样做会在层次结构中添加另一个控制器:A表示B,而B表示另一个A。 ,B应自行解散以显示原始A(请参见下面的代码)。
[x for x in [1,2,3] if x != 2]