Ios 斯威夫特:我的班级在视图中是什么样的
我正在构建一个应用程序,其中包含一个包含tableView控制器的容器视图。我创建了这个tableView,但我不知道如何再次访问这个对象,以便调用它的函数。目前有一个BucketTableViewController对象正在自动创建(可能是从情节提要)。然后,稍后我想对其调用一个函数并创建另一个BucketTableViewController对象。我可以用该方法上的print语句验证它们的唯一性。如何为作为原始对象的对象设置变量Ios 斯威夫特:我的班级在视图中是什么样的,ios,swift,uitableview,storyboard,swift2,Ios,Swift,Uitableview,Storyboard,Swift2,我正在构建一个应用程序,其中包含一个包含tableView控制器的容器视图。我创建了这个tableView,但我不知道如何再次访问这个对象,以便调用它的函数。目前有一个BucketTableViewController对象正在自动创建(可能是从情节提要)。然后,稍后我想对其调用一个函数并创建另一个BucketTableViewController对象。我可以用该方法上的print语句验证它们的唯一性。如何为作为原始对象的对象设置变量 import UIKit class FirstViewCo
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()
}
}
您可以从拥有该容器的视图控制器中的
prepareforsque(\uquo:sender:)
获取对它的引用。确保该标识符与您在Interface Builder中故事板的序列上设置的标识符的名称相匹配。或者,如果您确定没有其他序列的目标类型为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
}
}
}
对于这一点,评论太紧了,所以我要给出一个答案。您可以将
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
}
}
为什么不将
bucketsVC
作为一个实例变量?@ZoffDino您介意解释一下吗?当项目启动时,它会创建一个BucketTableViewControllerself.bucketsVC=BucketTableViewController()
创建另一个唯一的对象。我希望bucketsVC是在启动时创建的原始对象(在编写代码之前),因为表视图已经在视图中启动并运行,所以我不想进行分段。我不需要去。我只需要找到它所属的对象,我假设您使用的是Interface Builder中的容器视图,它通过“嵌入”序列连接视图控制器。这种类型的segue不同于其他类型的segue,因为它不是一种转换,而只是将视图控制器嵌入其容器中的机制。加载视图控制器时将调用此选项。这是正确答案(已投票)。使用容器视图托管子视图控制器时,它设置的链接是嵌入序列。这很奇怪,但这是segue的一个特例,prepareforsgue
方法确实会启动。加载父视图控制器的视图后,将立即调用嵌入序列。@PatrickLynch您是正确的,它现在正在工作。谢谢你的帮助我永远也不会明白的。邓肯也证实了你的说法。我很感激