ios – prepareForSegue正確得方式在視圖控制器之間傳遞值

    我正在嘗試學(xué)習(xí) Swift,我正在嘗試開發(fā)著名得音符應(yīng)用程序.

    有一個(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 ?? "");        }    }}

    謝謝.

    解決方法

    你得問題不是關(guān)于prepareForSegue,而是視圖控制器之間得關(guān)系.你得設(shè)計(jì)“感覺不對(duì)”得原因在于它.問題是你得筆記編寫視圖控制器對(duì)使用它得視圖控制器了解太多,因?yàn)樗苯硬僮鱽碜哉{(diào)用視圖控制器得變量.為了直接操作變量,它必須知道調(diào)用者得類.

    為什么這是個(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)站推薦給程序員好友。

    聲明:所有內(nèi)容來自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準(zhǔn)確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。
    發(fā)表評(píng)論
    更多 網(wǎng)友評(píng)論1 條評(píng)論)
    暫無評(píng)論

    返回頂部

    主站蜘蛛池模板: 久久久久国产一区二区| 国产精品一区二区久久不卡| 中文字幕在线一区二区三区| 亚洲一区二区三区高清不卡 | 免费看一区二区三区四区 | 美日韩一区二区三区| 无码人妻视频一区二区三区| 久久久久人妻一区精品果冻| 午夜爽爽性刺激一区二区视频| 亚洲AV无码一区二区三区人| 无码av免费一区二区三区试看| 国产精品无圣光一区二区| 无码精品前田一区二区| 国产伦精品一区二区三区无广告| 亚洲一区二区三区在线 | 全国精品一区二区在线观看| 中文字幕乱码人妻一区二区三区| 精品无码人妻一区二区免费蜜桃| 国精无码欧精品亚洲一区| 国产伦精品一区二区免费| 无码人妻一区二区三区精品视频 | 午夜爽爽性刺激一区二区视频| 日韩一区二区在线播放| 91精品一区二区| 精品无码成人片一区二区98| 久久久久人妻一区二区三区vr| 日本不卡一区二区三区| 亚洲国产精品一区二区久久| 消息称老熟妇乱视频一区二区| 无码人妻AⅤ一区二区三区| 亚洲国产成人一区二区精品区| 亚洲线精品一区二区三区| 亚洲AV无码一区二区乱子伦| 制服丝袜一区在线| 91秒拍国产福利一区| 亚洲AV一区二区三区四区| 国产精品成人免费一区二区 | 久久99国产精一区二区三区| 国产激情无码一区二区| 精品视频一区二区三三区四区 | 天堂Aⅴ无码一区二区三区|