追加用户textField输入到其他视图控制器中的阵列

问题描述:

所以我一直在寻找一种解决方案,我可以理解并应用到我的项目,但没有运气。追加用户textField输入到其他视图控制器中的阵列

我有一个弹出窗口(viewcontroller1)与UItextfield。在这个字段中,用户应该输入一个文本添加到另一个视图控制器(viewcontroller2)的数组中 我试过一些prepare(for segue)但也会将用户转移回viewcontroller1,对不对?

那么如何将这个UItextField数据追加并保存到viewcontroller2中的数组中,而不必在用户输入时自动移动用户呢?

您可以利用delegatesnotifications来实现此目的。

用户需要在用户完成编辑时调用委托函数(可能是“保存”按钮会给你回调,表示用户已完成输入)。有关代表的更多信息,请参阅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设置为seguedestinationViewController,然后您可以将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) 
    } 
+0

我敢肯定,这是正确的,但我试图迅速做到这一点,如果我没有错误的在目标C?不管怎样,谢谢你! – Alvarsson

+0

这里是一个迅速的3版本:) –

+0

感谢您将此翻译为swift,好像使用swift 4和NotificationCenter中的某处代码被depricated并且不起作用。但无论如何谢谢你! :) – Alvarsson