将用户textField输入附加到其他视图控制器中的数组中

时间:2017-07-25 09:03:27

标签: ios arrays swift

所以我一直在寻找一个我能理解并适用于我的项目的解决方案,但没有运气。

我有一个带有UItextfield的弹出窗口(viewcontroller1)。在此字段中,用户应输入附加到另一个视图控制器(viewcontroller2)中的数组的文本  我已尝试使用prepare(for segue),但这也会将用户转移回viewcontroller1,对吗?

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

5 个答案:

答案 0 :(得分:1)

您可以使用delegatesnotifications来实现此目标。

您需要在用户完成编辑时调用委托功能(可能是“保存”按钮将为您提供用户已完成输入的回调)。有关委托的更多信息,请参阅this

答案 1 :(得分:1)

使您的数组变量为“静态”。

static var arrayElements = [String]()

您可以使用

从项目的任何位置修改此数组
viewcontroller2.arrayElements

答案 2 :(得分:1)

可以使用NotificationCenter完成此操作。在ViewController2中添加观察者(Swift 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)
    }

答案 3 :(得分:0)

除非您需要立即使用Collections.sort(longList, new Comparator<Long>() { public int compare(long m1, long m2) { return (int) (m2 - m1); } java.lang.IllegalArgumentException: Comparison method violates its general contract! at java.util.TimSort.mergeLo(TimSort.java:763) at java.util.TimSort.mergeAt(TimSort.java:499) at java.util.TimSort.mergeForceCollapse(TimSort.java:442) at java.util.TimSort.sort(TimSort.java:239) at java.util.TimSort.sort(TimSort.java:189) at java.util.Arrays.sort(Arrays.java:867) at java.util.Collections.sort(Collections.java:229) 中输入的数据,否则您可以使用UITextField。此函数实际上并不启动ViewController1,但是当segue即将发生时,系统会自动调用它,方法是选择已连接到prepare(for segue)的UI元素。 {1}}通过一段代码调用segue

答案 4 :(得分:0)

从文本字段输入文字后,您是希望将用户带到ViewController2还是留在ViewController1

如果您想在输入此数据后将用户带到第二个视图控制器,则可以将此字符串以segue方式传递给第二个视图控制器。 为此,在ViewController2.h文件中,将新属性作为字符串添加到第二个视图控制器。 当您执行performSegueWithIdentifier时,将您作为发件人输入的字符串传递给它,并在准备segue时,将viewController2设置为seguedestinationViewController,然后您可以设置{{1}发件人。

如果你只想附加它,我建议创建一个新的共享实例或单例对象类。无论您输入哪个视图控制器,此实例或对象都有一个数组可以维护它的值。 您可以查看此问题的首选答案,可能有所帮助:Objective-C Defining a Global Array for use by several ViewControllers