我正在构建一个包含tableView控制器的容器视图的应用程序。我创建了这个tableView,但我不知道如何再次访问这个对象,所以我可以调用它上面的函数。目前有一个自动创建的BucketTableViewController对象(可能来自故事板)。然后我想调用它上面的函数并创建另一个BucketTableViewController对象。我可以验证它们对该方法的print语句是唯一的。如何为作为原始对象的对象设置变量?
import UIKit
class FirstViewController: UIViewController {
var bigArray = ["M", "A", "R", "C"]
let delegate = UIApplication.sharedApplication().delegate as! AppDelegate
override func viewDidLoad() {
super.viewDidLoad()
reachForWebsite()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func reachForWebsite(){
let url = NSURL(...)
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
do {
...
// HERE IS THE ISSUE
var bucketsVC = BucketTableViewController()
bucketsVC.updateBuckets(self.bigArray)
} catch let myJSONError {
print(myJSONError)
}
}
task!.resume()
}
}
答案 0 :(得分:2)
您可以从拥有容器的视图控制器中的prepareForSeque(_:sender:)
获取对它的引用。确保该标识符与您在Interface Builder中的故事板中在segue上设置的标识符的名称相匹配。或者,如果您确定没有其他目的地类型为BucketTableViewController
的分段,则可以省略标识符部分。
class BucketTableViewController: UITableViewController {}
class FirstViewController: UIViewController {
var bucketViewController: BucketTableViewController!
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
super.prepareForSegue( segue, sender: sender )
if let vc = segue.destinationViewController as? BucketTableViewController where segue.identifier == "embeddedBuketViewcontroller" {
self.bucketViewController = vc
}
}
}
答案 1 :(得分:0)
评论太紧了,所以我把它作为答案。您可以将 bucketsVC`设为实例变量:
class FirstViewController: UIViewController {
var bucketsVS : BucketTableViewController?
func reachForWebsite(){
...
do {
self.bucketsVC = BucketTableViewController()
self.bucketsVC!.updateBuckets(self.bigArray)
} catch {
...
}
// Now you can use it anywhere within your UIViewController
}
}