     _currentFirstResponder = self
   }
 
-}
+  var mik_viewControllerInChain: UIResponder? {
+    var nextR = Optional(self)
+    while nextR != nil && nextR?.isKind(of: UIViewController.self) != true {
+      nextR = nextR?.next
+    }
+
+    return nextR?.isKind(of: UIViewController.self) == true ? nextR : nil
+  }
+
+  var mik_responderToSwizzle: UIResponder {
+    if let vc = mik_viewControllerInChain { return vc }
+    return self
+  }
+
+}

      let origIMPC = unsafeBitCast(origIMP, to: IMPType.self)
      let block: @convention(block) (AnyObject, AnyObject) -> () = {
        if let firstResp = UIResponder.mik_firstResponder {
          swizzle(class: type(of: firstResp))
        }

        origIMPC($0, selector, makeUniqueImageTitles($1))

      let origIMPC = unsafeBitCast(origIMP, to: IMPType.self)
      let block: @convention(block) (AnyObject, CGRect, UIView) -> () = {
        if let firstResp = UIResponder.mik_firstResponder {
          swizzle(class: type(of: firstResp.mik_responderToSwizzle))
        } else {
          // Must call `becomeFirstResponder` since there's no firstResponder yet
          if let n = $2.mik_viewControllerInChain {
            swizzle(class: type(of: n))
            n.becomeFirstResponder()
          } else {
            swizzle(class: type(of: $2))
            $2.becomeFirstResponder()
          }
        }

        origIMPC($0, selector, $1, $2)
