在swift4

时间:2019-01-13 19:52:56

标签: ios swift delegates

enter image description here

在上面的图片中,有两个视图。顶部是用于显示日期的视图(此视图的类名称为 calender视图)。底部是一个表格视图。当前视图名称是主视图。当我单击该表格视图的单元格时,它将转到下一个视图。当我取消下一个视图时,我想将一些数据传递给日历视图。如何实现这一点。

class MainView: UIViewController, UITableViewDataSource, UITableViewDelegate {

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        let next = self.storyboard?.instantiateViewController(withIdentifier: "NextVC") as! NextVC
        self.present(next, animated: true, completion: nil)

    }

}


class NextVC: UIViewController {

    var sendingData: String?

    @IBAction func backAction(_ sender: Any) {
        dismiss(animated: true, completion: nil)

    }
}


class CalenderView: UIViewController{

    var receiveValue: String?
}

在这里,我要关闭 nextview 时, sendingData 的值将传递到日历视图

如何执行此操作?请帮忙。

1 个答案:

答案 0 :(得分:2)

我可以给你两个解决方案:

  1. 您可以创建自定义通知。

首先,您应该使用 sendingData 发布通知。

import urllib 
import requests
url = '....'
response = urllib.request.urlopen(url)

接下来,在具有日历视图的主视图控制器上,您应该注册“ UpdateCalendarNotification”名称的通知。

NotificationCenter.default.post(name: NSNotification.Name(rawValue: UpdateCalendarNotification), object: sendingData)

在选择器 func registerNotifications() { NotificationCenter.default.addObserver(self, selector: #selector(updateCalendarView(_:)), name: NSNotification.Name(rawValue: "UpdateCalendarNotification"), object: nil) } 上,您应该处理日历视图的更改。

updateCalendarView(_:)
  1. 第二个解决方案是“下一个控制器”的公用块。

在下一个视图控制器上,您应该添加以下处理程序:

    @objc
    func updateCalendarView(_ notification: NSNotification) {
        if let sendingData = notification.object as? String {
            /// Update calendar view
        }
    }

var onDismiss: ((String?) -> Void)? 方法中,您应该传递数据

backAction

在主视图控制器中,您应该像这样实现该块:

    onDismiss?(sendingData)

希望这对您有帮助)