具有标签视图控制器的Segue保持传递值(Segue w/ Tab View Controller Keeps Passing Value)

编程入门 行业动态 更新时间:2024-10-18 16:50:13
具有标签视图控制器的Segue保持传递值(Segue w/ Tab View Controller Keeps Passing Value)

我正在开发一个围绕Tab View Controller构建的iOS应用程序。 我创建了一个“联系人”选项卡,用户可以从列表中查找并选择联系人。 当用户选择联系人时,它会获取联系人的姓名并将其传递给其他选项卡。 该功能正在这样完成:

func passName(name: String) { let navTab = self.tabBarController!.viewControllers![2] as! UINavigationController let homeTab = navTab.viewControllers[0] as! MainController homeTab.passedName = name tabBarController?.selectedIndex = 2 }

到目前为止,一切都正常工作(名称被加载到文本字段中)。 我的问题是,每次更改标签然后返回“我的主页”选项卡时,值似乎都会继续显示。 例如,如果我从联系人中选择“John”,它将转到“主页”选项卡并将John的名称放在文本字段中。 假设我删除了名字的最后两个字母,所以现在它是“Jo”。 如果我加载了另一个标签并返回,则名称字段已重置为“John”。 就像每次打开Home选项卡时重新传递值一样。 此外,每次在传递名称后加载“主页”选项卡时,我的控制台都会打印:“名称已通过:约翰”,因此它显示每次选项卡出现时都会处理此选项卡。 这是我处理名称的代码:

var passedName: String! override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) //Checks if name was passed to controller if let validName = passedName { print("Name passed: \(validName)") nameTextField.text = validName } }

我错误地传递了数据吗? 我想这可能是因为我在viewWillAppear方法中调用了上面的代码,但这没有意义,因为本质上数据只从“联系人”选项卡传递一次。 谢谢!

I am working on an iOS application that is built around a Tab View Controller. I have created a "Contacts" tab, where a user can find and select a contact from a list. When the user selects the contact, it takes the contact's name and passes it to a different tab. That function is being done like so:

func passName(name: String) { let navTab = self.tabBarController!.viewControllers![2] as! UINavigationController let homeTab = navTab.viewControllers[0] as! MainController homeTab.passedName = name tabBarController?.selectedIndex = 2 }

Everything works as it should so far (name is loaded into text field). My issue is that the value seems to keep coming back every time I change tabs and then go back to my Home tab. For example, if I select "John" from my contacts, it will take me to the Home Tab and put John's name in a textfield. Let's say I delete the last two letters of the name, so now it is "Jo". If I load a different tab and come back, the name field has been reset to "John". It's as if the value gets re-passed every time I open the Home Tab. Also, every time I load the Home Tab after passing a name, my console prints: "Name Passed: John", so it shows that this is being processed every single time the tab appears. Here is my code for processing the name:

var passedName: String! override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) //Checks if name was passed to controller if let validName = passedName { print("Name passed: \(validName)") nameTextField.text = validName } }

Am I passing the data incorrectly? I was thinking it might be because I have the above code being called in the viewWillAppear method, but that doesn't make sense, as essentially the data is only being passed one time from the Contacts tab. Thanks!

最满意答案

问题是“passName”变量每次在UITextField中编辑时都不会更改其值。 请记住,每次更改选项卡时,UIViewController都将调用viewWillAppear和viewDidAppear。 因此,一旦选择其他选项卡并返回,您的UITextField将始终显示passName值。

我建议你每次编辑文本字段时都应该更新passName值。

对不起,我的英语不好。

The problem is "passedName" variable doesn't changed its value every time you edit it in your UITextField. Keep in mind that every time you change tabs, the UIViewController will call viewWillAppear and viewDidAppear. So your UITextField will always show passedName value once you select other tab and return.

I suggest that every time you edit the textfield you should update passedName value.

Sorry for my bad english.

更多推荐

本文发布于:2023-08-06 22:40:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1456727.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:视图   控制器   标签   Segue   Passing

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!