2017-07-25 50 views
0

所以我一直在尋找一種解決方案,我可以理解並應用到我的項目,但沒有運氣。追加用戶textField輸入到其他視圖控制器中的陣列

我有一個彈出窗口(viewcontroller1)與UItextfield。在這個字段中,用戶應該輸入一個文本添加到另一個視圖控制器(viewcontroller2)的數組中 我試過一些prepare(for segue)但也會將用戶轉移回viewcontroller1,對不對?

那麼如何將這個UItextField數據追加並保存到viewcontroller2中的數組中,而不必在用戶輸入時自動移動用戶呢?

回答

1

您可以利用delegatesnotifications來實現此目的。

用戶需要在用戶完成編輯時調用委託函數(可能是「保存」按鈕會給你回調,表示用戶已完成輸入)。有關代表的更多信息,請參閱this

1

使您的數組變量爲'static'。

static var arrayElements = [String]() 

您可以通過使用

viewcontroller2.arrayElements 
0

除非你需要使用進入UITextField數據立即ViewController1修改從項目中的任何地方這個數組,你可以使用prepare(for segue)。該功能實際上並不啓動segue,但是當通過選擇已連接到InterfaceBuilder中的segue的UI元素時,系統將自動調用該功能,方法是到達一段代碼,該代碼調用self.perform(segue)

0

一旦從文本框輸入文本,是否要將用戶帶到ViewController2或保留在ViewController1

如果您希望在輸入此數據後將用戶帶到第二個視圖控制器,那麼您可以將該字符串傳遞給第二個視圖控制器。 爲此,請在ViewController2.h文件中以字符串形式向第二個視圖控制器添加一個新屬性。 當你完成你的performSegueWithIdentifier時,你將你輸入的字符串作爲發件人,並在準備發送時,將viewController2設置爲seguedestinationViewController,然後您可以將viewController2.string設置給發件人。

如果你只是想追加它,我建議創建一個共享實例或單例對象的新類。這個實例或對象將擁有一個數組,可以保持它的值,而不管您輸入的是哪個視圖控制器。 你可以看看這個問題的首選答案,可能有幫助:Objective-C Defining a Global Array for use by several ViewControllers

1

這可以使用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

相關問題