gpt4 book ai didi

ios - 在 swift 3 中从另一个 View 中选择某些内容后,更新一个打开的 View 中按钮中的文本

转载 作者:行者123 更新时间:2023-11-30 12:47:59 25 4
gpt4 key购买 nike

我有一个包含一些数据的 View 正在从服务器读取值,当用户单击一个按钮时,我打开另一个 View 作为弹出 View ,然后用户从此 View 中选择某些内容,然后何时单击“确定”按钮用户必须直接返回到先前打开的 View ,仅使用所选选项更新单击按钮上的文本。

我不知道类似的事情在 swift 3 中是否可能,我做了一切,只是我不知道如何使用它来仅对按钮的文本进行更新,而不进行更新从另一个 View 读取该值后的所有 View !

主视图:

override func viewDidLoad() {
super.viewDidLoad()

//read saved username
let prefs:UserDefaults = UserDefaults.standard
Savedusername = prefs.object(forKey: "SavedUsername")as! String


self.getUserData()
//after this I read and display all date from server and it's OK

// Do any additional setup after loading the view.
}

当单击按钮时,我直接使用布局从第一个 View 转到另一个 View 。

这是“确定”单击按钮的代码,这里我想读取在第二个 View 中取值的选择变量的值,并将该值传递给第一个 View ,仅更新第一个单击的按钮上的文本

 @IBAction func okPressedButton(_ sender: Any) {

//here how I can passing data without using this line that is make update for all previous view
//self.performSegue(withIdentifier: "first_view", sender: self)

self.dismiss(animated: true, completion: nil )

}

更新:

第二个 View :

protocol MyProtocol {
func updateData(data: String)
}

class CalenderPopUpViewController: UIViewController {

@IBOutlet weak var calenderPopUp: UIView!
@IBOutlet weak var datePickerView: UIDatePicker!


var delegate:MyProtocol?



var selectedDate:String = ""



override func viewDidLoad() {
super.viewDidLoad()

calenderPopUp.layer.cornerRadius = 10
calenderPopUp.layer.masksToBounds = true

// Do any additional setup after loading the view.
}




@IBAction func selectDatePicker(_ sender: Any) {

var dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
var strDate = dateFormatter.string(from: datePickerView.date)
self.selectedDate = strDate
print(selectedDate)


}

@IBAction func okPressedButton(_ sender: Any) {


self.delegate?.updateData(data: self.selectedDate)

self.dismiss(animated: true, completion: nil )

}

@IBAction func cancelPressedButton(_ sender: Any) {

self.dismiss(animated: true, completion: nil )

}



}

头等舱:

class UserInfoViewController: UIViewController{
.
.
.
.
.
.
.


func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "read_date_from_calender" {
(segue.destination as! CalenderPopUpViewController).delegate = self
}
}

override func viewDidAppear(_ animated: Bool) {

if(receiveddata != "")
{
print(receiveddata) // I tried to print received data here but without any result
}
}
}

extension UserInfoViewController: MyProtocol {
func updateData(data: String) {
self.receiveddata = data
}

}

最佳答案

如果我正确理解你的问题,你需要使用协议(protocol)

在模态视图/ View Controller 类的顶部写下这样的内容:

protocol MyProtocol {
func newDataSelected(data: String)
}

然后在您呈现的 View 类中的某个位置声明一个像这样的变量

var delegate: MyProtocol?

然后,当您进行选择时,调用委托(delegate)将数据传递回呈现 View Controller :

self.delegate?.newDataSelected(data: "someData")

当您呈现 View Controller 时,请务必设置委托(delegate):

func present() {
let modal = ModalViewController()
modal.delegate = self
self.present(modal, animated: true, completion: nil)
}

最后确保您从呈现 View Controller 中的协议(protocol)继承

extension PresentingViewController: MyProtocol {
func newDataSelected(data: String) {
// Do some stuff
}
}

关于ios - 在 swift 3 中从另一个 View 中选择某些内容后,更新一个打开的 View 中按钮中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41377321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com