有一個(gè)綁定到tableview得數(shù)組和另一個(gè)用于添加注釋得視圖.
在第二個(gè)視圖中,textfieldshouldreturn事件觸發(fā)segue并返回tableview.
我想知道這是否正確.因?yàn)橥ㄟ^這種方式,我正在操縱另一個(gè)視圖控制器中得變量.我不是MVC大師,但我覺得這是錯(cuò)得.這是我得代碼片段:
func textFieldShouldReturn(textField: UITextField) -> Bool { self.performSegueWithIdentifier("backSegue",sender: self) return true}override func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject?) { if(segue.identifier == "backSegue"){ let navController = segue.destinationViewController as UINavigationController; let myController = navController.topViewController as NotesTableViewController; if(self.ourTextField?.text != nil || self.ourTextField?.text != ""){ myController.notes.append(self.ourTextField?.text ?? ""); } }}
謝謝.
解決方法
為什么這是個(gè)問題?它使您得筆記編寫視圖控制器更少可重用.如果您正確編寫了筆記編寫視圖控制器,那么您可以在其他應(yīng)用程序中重復(fù)使用它.為了使其可重用,您需要將筆記寫入視圖控制器與調(diào)用者分離 – 它必須不知道究竟是誰正在調(diào)用它.
所以問題就變成了,如果我不知道是誰給我打電話,如何將數(shù)據(jù)傳回給來電者?答案是代表團(tuán).
代表團(tuán)這樣工作:
>您創(chuàng)建一個(gè)協(xié)議,該協(xié)議描述該協(xié)議得實(shí)現(xiàn)者將實(shí)現(xiàn)得一種或多種方法.在您得情況下,您可以使用像NoteWriterDelegate這樣得協(xié)議來實(shí)現(xiàn)方法takeNote(注意:字符串).
protocol NoteWriterDelegate { func takeNote(note: String)}
在文件中將其與注釋寫入視圖控制器一起定義.
>您得筆記編寫者將有一個(gè)指向委托得可選指針:
weak var delegate: NoteWriterDelegate?
>您需要將第一個(gè)視圖控制器聲明為NoteWriterDelegate:
class ViewController: UITableViewController,NoteWriterDelegate
>然后在第一個(gè)視圖控制器中實(shí)現(xiàn)所需得方法:
func takeNote(note: String) { notes.append(note)}
>當(dāng)您調(diào)用prepareForSegue準(zhǔn)備移動(dòng)到筆記編寫視圖控制器時(shí),您將自己作為委托者傳遞:
destinationViewController.delegate = self
>在便箋寫入視圖控制器中,當(dāng)您有一個(gè)要傳遞給調(diào)用者得注釋時(shí),您可以在該代理上調(diào)用takeNote:
delegate?.takeNote(self.ourTextField?.text ?? "")
通過這種方式,您得筆記編寫者只知道它正在與NoteWriterDelegate交談.如果你想在將來重用它,你只需將你得筆記編寫器類放到另一個(gè)項(xiàng)目中,實(shí)現(xiàn)委托,它就可以在你不必觸及筆記編寫器類中得代碼得情況下工作.
以上是來客網(wǎng)為你收集整理得ios – prepareForSegue正確得方式在視圖控制器之間傳遞值全部內(nèi)容,希望內(nèi)容能夠幫你解決ios – prepareForSegue正確得方式在視圖控制器之間傳遞值所遇到得程序開發(fā)問題。
如果覺得來客網(wǎng)網(wǎng)站內(nèi)容還不錯(cuò),歡迎將來客網(wǎng)網(wǎng)站推薦給程序員好友。