访问导航堆栈中的当前View Controller

时间:2016-05-16 13:34:48

标签: ios swift

所以,我有导航控制器。从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。

1 个答案:

答案 0 :(得分:3)

Sergey Gamayunov,

您始终可以使用

访问导航堆栈中的最顶层ViewController
def 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

多数民众赞成你很高兴:)快乐的编码伙伴:)