I'm trying to have a navigation link that is triggered programatically. If I use the following code, on iOS, then the second NavigationLink is not put into the UI, as expected. On watchOS, however, there's a visible button with no text.
How can I accomplish this on watchOS?
var body: some View {
NavigationView {
VStack {
NavigationLink("No login required", destination: UnprotectedView())
NavigationLink(destination: ProtectedView(), isActive: $isActive) {
EmptyView()
}
Button("Login required", action: pushIfAuthenticated)
}
.navigationBarTitle("Choose")
}
}
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
On a view controller shown as part of a UINavigationController's stack, how do I tell if the Back button was pressed? The previously suggested answer from ages ago, to check isBeingDismissed(), seems to always return a false value.
In Apple's documentation it says this:"This method, though convenient, is inefficient if used multiple times in succession. Achieve better performance by chaining filters without asking for the outputs of individual filters."That confuses me though because I don't know how to link them together without getting the output. For example, this is my method to apply a TiltShift filter, based on the instructions from Apple's docs. When I perform the gradient filter, I have to take the outputImage of that to pass into the next filter. What's the right way to be doing this? override public var outputImage: CIImage? {
guard let inputImage = inputImage else {
return nil
}
let clamped = inputImage.clampedToExtent()
let blurredImage = clamped.applyingGaussianBlur(sigma: inputRadius)
var gradientParameters = [
"inputPoint0": CIVector(x: 0, y: 0.75 * inputImage.extent.height),
"inputColor0": CIColor(red: 0, green: 1, blue: 0, alpha: 1),
"inputPoint1": CIVector(x: 0, y: 0.5 * inputImage.extent.height),
"inputColor1": CIColor(red: 0, green: 1, blue: 0, alpha: 0)
];
guard let gradientImage = ciImage(from: "CILinearGradient", parameters: gradientParameters) else {
return nil
}
gradientParameters["inputPoint0"] = CIVector(x: 0, y: 0.25 * inputImage.extent.height)
guard let backgroundGradientImage = ciImage(from: "CILinearGradient", parameters: gradientParameters) else {
return nil
}
let maskParameters = [
kCIInputImageKey: gradientImage,
kCIInputBackgroundImageKey: backgroundGradientImage
]
guard let maskImage = ciImage(from: "CIAdditionCompositing", parameters: maskParameters) else {
return nil
}
let combinedParameters = [
kCIInputImageKey: blurredImage,
kCIInputBackgroundImageKey: clamped,
kCIInputMaskImageKey: maskImage
]
return ciImage(from: "CIBlendWithMask", parameters: combinedParameters)
}
private func ciImage(from filterName: String, parameters: [String: Any]) -> CIImage? {
guard let filtered = CIFilter(name: filterName, parameters: parameters) else {
return nil
}
return filtered.outputImage
}
When I try to re-open the storyboard I was just editing in the current production version of Xcode it says"The document Main.storyboard could not be opened. The operation couldn't be completed. (com.apple.InterfaceBuilder error -1)"What in the world do I do to fix that? I *really* don't want to go back to my last git commit for that file because there have been quite extensive changes with pretty complex autolayout settings.