所以我一直在寻找一个我能理解并适用于我的项目的解决方案,但没有运气。
我有一个带有UItextfield
的弹出窗口(viewcontroller1)。在此字段中,用户应输入附加到另一个视图控制器(viewcontroller2)中的数组的文本
我已尝试使用prepare(for segue)
,但这也会将用户转移回viewcontroller1,对吗?
那么我如何将这个UItextField数据追加并保存到viewcontroller2中的数组中,而不会在用户输入时自动移动用户?
答案 0 :(得分:1)
您可以使用delegates
或notifications
来实现此目标。
您需要在用户完成编辑时调用委托功能(可能是“保存”按钮将为您提供用户已完成输入的回调)。有关委托的更多信息,请参阅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
设置为segue
。destinationViewController
,然后您可以设置{{1}发件人。
如果你只想附加它,我建议创建一个新的共享实例或单例对象类。无论您输入哪个视图控制器,此实例或对象都有一个数组可以维护它的值。 您可以查看此问题的首选答案,可能有所帮助:Objective-C Defining a Global Array for use by several ViewControllers