追加用户textField输入到其他视图控制器中的阵列
所以我一直在寻找一种解决方案,我可以理解并应用到我的项目,但没有运气。追加用户textField输入到其他视图控制器中的阵列
我有一个弹出窗口(viewcontroller1)与UItextfield
。在这个字段中,用户应该输入一个文本添加到另一个视图控制器(viewcontroller2)的数组中 我试过一些prepare(for segue)
但也会将用户转移回viewcontroller1,对不对?
那么如何将这个UItextField数据追加并保存到viewcontroller2中的数组中,而不必在用户输入时自动移动用户呢?
您可以利用delegates
或notifications
来实现此目的。
用户需要在用户完成编辑时调用委托函数(可能是“保存”按钮会给你回调,表示用户已完成输入)。有关代表的更多信息,请参阅this。
使您的数组变量为'static'。
static var arrayElements = [String]()
您可以通过使用
viewcontroller2.arrayElements
除非你需要使用进入UITextField
数据立即ViewController1
修改从项目中的任何地方这个数组,你可以使用prepare(for segue)
。该功能实际上并不启动segue
,但是当通过选择已连接到InterfaceBuilder
中的segue
的UI元素时,系统将自动调用该功能,方法是到达一段代码,该代码调用self.perform(segue)
。
一旦从文本框输入文本,是否要将用户带到ViewController2
或保留在ViewController1
?
如果您希望在输入此数据后将用户带到第二个视图控制器,那么您可以将该字符串传递给第二个视图控制器。 为此,请在ViewController2.h
文件中以字符串形式向第二个视图控制器添加一个新属性。 当你完成你的performSegueWithIdentifier时,你将你输入的字符串作为发件人,并在准备发送时,将viewController2
设置为segue
。 destinationViewController
,然后您可以将viewController2.string
设置给发件人。
如果你只是想追加它,我建议创建一个共享实例或单例对象的新类。这个实例或对象将拥有一个数组,可以保持它的值,而不管您输入的是哪个视图控制器。 你可以看看这个问题的首选答案,可能有帮助:Objective-C Defining a Global Array for use by several ViewControllers
这可以使用NotificationCenter
完成。在您的ViewController2加观察者(斯威夫特3版):
func viewDidLoad() {
NotificationCenter.default.addObserver(self, selector: #selector(arrayUpdateNotificationReceived :), name: "TextFieldInputChangedNotification", object: nil)
}
func arrayUpdateNotificationReceived (notification : Notification) {
yourArray.append(notification.object);
}
在ViewControlller1:
当用户点击添加上弹出:
@IBAction func yourButtonAction(sender : UIButton) {
let inputText = inputTextField.text;
notificationCenter.post(name: "TextFieldInputChangedNotification", object: inputText)
}
不要忘了在你的ViewController 2删除观察员:
deinit {
NotificationCenter.default.removeObserver(self)
}
我敢肯定,这是正确的,但我试图迅速做到这一点,如果我没有错误的在目标C?不管怎样,谢谢你! – Alvarsson
这里是一个迅速的3版本:) –
感谢您将此翻译为swift,好像使用swift 4和NotificationCenter中的某处代码被depricated并且不起作用。但无论如何谢谢你! :) – Alvarsson