我从(attendanceViewController)呈现我的secondViewController并在解除完成时我正在尝试传递参数和调用函数。出现AttendanceViewController并调用该函数。问题是当解雇(@IBOutlet weak var tableView: UITableView! , @IBOutlet weak var boxTypeSKU: UIView!....all)
self.presentingViewController!.dismissViewControllerAnimated(true, completion: { _ i
let attView: AttendanceViewController = self.storyboard!.instantiateViewControllerWithIdentifier("AttendanceViewID") as! AttendanceViewController
attView.currAttendance = self.currAttendance
attView.searchProductWithSKU("\(sku)")
})
答案 0 :(得分:0)
首先要注意的是,AttendanceViewController
的新实例正在被实例化。这意味着未在正确的对象上设置属性。需要引用显示secondViewController
的视图控制器。如何完成取决于你,但我推荐一个包含currAttendance
变量的回调。这将是呈现的视图控制器上的属性。一旦呈现的视图控制器调用回调,父AttendanceViewController
可以设置自己的属性并关闭呈现的视图控制器并调用searchProductWithSKU(_:)
方法。
答案 1 :(得分:0)
我使用像这个教程(http://swiftdeveloperblog.com/pass-information-back-to-the-previous-view-controller/这样的协议解决了我的问题。我认为它更优雅和高效。
我的更新代码:
在第二个视图Controller(BarcodeScannerViewController.swift)中,我这样做:
protocol BarcodeScannerProtocol {
func setSKUScanner(sku: String)
}
class BarcodeScannerViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
var delegate:BarcodeScannerProtocol?
func back() {
let sku = (barcode as NSString).substringWithRange(NSMakeRange(6, 8))
delegate?.setSKUScanner(sku)
self.presentingViewController!.dismissViewControllerAnimated(true, completion: { _ in
}
}
在第一个视图控制器(AttendanceViewController.swift)中:
class AttendanceViewController: UIViewController, BarcodeScannerProtocol {
var strSKUScanner : String?
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if let skuScanned = strSKUScanner {
searchProductWithSKU(skuScanned)
} else {
fetchProducts()
}
}
// MARK: BarcodeScannerProtocol functions
func setSKUScanner(sku: String) {
self.strSKUScanner = sku
}
}