所以,我有导航控制器。从Root View Controller到其他View Controller都有segue。
当我想要访问其他View Controller时,我会覆盖prepareForSegue
方法并使用destinationViewController
属性。
但那对我不好。 prepareForSegue
中的所有内容都会在每次调用segue时执行,但我不想要它。其次,它破坏了我的代码的逻辑:在performSegueWithIdentifier
之后(实际上之前)执行跳转到代码中的其他位置。
如果我可以像使用Root ViewController一样访问其他视图控制器 - 例如关键字self
,那将会非常棒。
该代码示例使我的问题更加清晰:
func startWorking() {
/*here we made some stuff for current VC
...
...
*/
//next we go to new View Controller
performSegueWithIdentifier("newVC", sender: nil)
//then all actions that I want to do begin at another method - prepareForSegue
//But I want get access to View Controller that user sees now!
//For example present some view:
let someView = UIView(frame: someFrame)
/*question subject*/.view.addSubview(somView)
}
/ 问题主题 / - 是我用segue和问题提出的当前ViewController。
答案 0 :(得分:3)
Sergey Gamayunov,
您始终可以使用
访问导航堆栈中的最顶层ViewControllerdef parse(self, response):
for sel in response.xpath('//li[@class="oneclass"]'):
try:
item = exampleItem()
item['quant1'] = float(sel.xpath('a/div/span[@class="exampleclass"]/span[@class="amount"]/text()'))
item['quant2'] = float(sel.xpath('div[@class="otherexampleclass"]/input/@max'))
yield item
except:
print "could not crawl {}".format(sel)
修改强>
我相信如果你不能在prepareForSegue或self.navigationController?.topViewController中获得你的逻辑,你必须看看你的设计模式:)
据说我明白你要做的就是在performSegue之后访问ViewController而不使用prepareForSegue,你可以使用这段代码
let viewCOntroller = self.navigationController?.topViewController
上述功能是导航控制器委托:)所以你必须声明你的viewController以确认UINavigationControllerDelegate。像
func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) {
if viewController is YourDestinationViewControllerClass {
print("You have access to viewController loaded do whatever you want")
}
}
并在
class ViewController: UIViewController,UINavigationControllerDelegate
多数民众赞成你很高兴:)快乐的编码伙伴:)