<!--
{
  "availability" : [
    "watchOS: 4.0.0 - 9.2.0"
  ],
  "documentType" : "symbol",
  "framework" : "WatchKit",
  "identifier" : "/documentation/WatchKit/WKExtension/visibleInterfaceController",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Property",
  "symbol" : {
    "kind" : "Instance Property",
    "modules" : [
      "WatchKit"
    ],
    "preciseIdentifier" : "c:objc(cs)WKExtension(py)visibleInterfaceController"
  },
  "title" : "visibleInterfaceController"
}
-->

# visibleInterfaceController

Returns the last visible interface controller.

```
var visibleInterfaceController: WKInterfaceController? { get }
```

## Discussion

Use this property to determine which interface controller is currently displayed by the app. For example, in the extension delegate’s [`handle(_:)`](/documentation/WatchKit/WKExtensionDelegate/handle(_:)-92ulv)  method for a snapshot request,  use this property to determine the user interface’s current contents, and make any changes before the snapshot is taken.

Or, when the app is launched due to a Handoff activity, use the [`handleUserActivity(_:)`](/documentation/WatchKit/WKExtensionDelegate/handleUserActivity(_:)) method’s `userInfo` dictionary to determine what to display. Then use the [`visibleInterfaceController`](/documentation/WatchKit/WKExtension/visibleInterfaceController) property to determine whether to push or pop to a different interface controller.

This property contains the following values based on the app’s current state:

- Just launched: The app’s [`rootInterfaceController`](/documentation/WatchKit/WKExtension/rootInterfaceController).
- Running in the foreground: The currently presented interface controller.
- Running in the background: The last interface controller presented by the app.

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)