What is UIActivityViewController used for in iOS development?
UIActivityViewController is used to present a share sheet that lets users share content like text, images, or URLs with other apps or services.
Click to reveal answer
beginner
How do you initialize a UIActivityViewController with items to share?
You create it by passing an array of items (like strings or images) to the initializer: UIActivityViewController(activityItems: [items], applicationActivities: nil).
Click to reveal answer
intermediate
Why should you set the popoverPresentationController?.sourceView on iPad when using UIActivityViewController?
On iPad, the share sheet appears as a popover. Setting sourceView tells iOS where to anchor the popover, preventing crashes and ensuring correct display.
Click to reveal answer
intermediate
Can you customize the activities shown in the share sheet?
Yes, by providing custom UIActivity objects in the applicationActivities parameter or excluding some built-in activities using excludedActivityTypes.
Click to reveal answer
intermediate
What happens after the user completes or cancels sharing in UIActivityViewController?
You can handle completion with the completionWithItemsHandler closure to know if the user shared, cancelled, or if there was an error.
Click to reveal answer
What parameter do you pass to UIActivityViewController to specify what to share?
AshareItems
BactivityItems
CcontentItems
DitemsToShare
✗ Incorrect
The correct parameter is activityItems, which is an array of items to share.
Which property must be set on iPad to avoid a crash when presenting UIActivityViewController?
AmodalPresentationStyle
BpresentationController
Cdelegate
DpopoverPresentationController?.sourceView
✗ Incorrect
On iPad, popoverPresentationController?.sourceView must be set to anchor the popover.
How do you exclude some activities from the share sheet?
AUse a filter method
BRemove them from activityItems
CSet excludedActivityTypes property
DSet isExcluded to true
✗ Incorrect
excludedActivityTypes is used to hide unwanted activities from the share sheet.
What type of data can you share using UIActivityViewController?
AText, images, URLs, and more
BOnly images
COnly text
DOnly URLs
✗ Incorrect
UIActivityViewController supports sharing various data types including text, images, URLs, and custom objects.
Which closure lets you know if the user completed or cancelled sharing?
AcompletionWithItemsHandler
BshareCompletion
CdidFinishSharing
DcompletionHandler
✗ Incorrect
completionWithItemsHandler is the closure called after the share sheet finishes.
Explain how to present a share sheet using UIActivityViewController in an iOS app.
Think about what you want to share and how to show the share sheet safely on all devices.
You got /3 concepts.
Describe how you can customize which sharing options appear in the share sheet.
Consider how to control the user experience by limiting or adding sharing choices.
You got /3 concepts.
Practice
(1/5)
1. What is the main purpose of UIActivityViewController in an iOS app?
easy
A. To manage app settings
B. To present a share sheet allowing users to share content
C. To create a custom navigation bar
D. To handle background tasks
Solution
Step 1: Understand the role of UIActivityViewController
UIActivityViewController is designed to present a share sheet for sharing content.
Step 2: Compare with other options
Options A, B, and D relate to different app functions not handled by UIActivityViewController.
Final Answer:
To present a share sheet allowing users to share content -> Option B
Confusing UIActivityViewController with navigation or settings controllers
Thinking it manages background tasks
Assuming it customizes UI elements beyond sharing
2. Which of the following is the correct way to initialize a UIActivityViewController with a text string to share?
easy
A. UIActivityViewController(activityItems: ["Hello World"], applicationActivities: nil)
B. UIActivityViewController(items: "Hello World")
C. UIActivityViewController(shareItems: ["Hello World"])
D. UIActivityViewController(content: "Hello World")
Solution
Step 1: Recall the initializer signature
The correct initializer is UIActivityViewController(activityItems: [Any], applicationActivities: [UIActivity]?).
Step 2: Match the correct syntax
UIActivityViewController(activityItems: ["Hello World"], applicationActivities: nil) matches the correct syntax with an array of items and nil for activities.
Final Answer:
UIActivityViewController(activityItems: ["Hello World"], applicationActivities: nil) -> Option A
Quick Check:
Initializer uses activityItems array [OK]
Hint: Use activityItems array to pass share content [OK]
Common Mistakes:
Passing a single string instead of an array
Using wrong parameter names like items or shareItems
Omitting applicationActivities parameter
3. Given the code snippet below, what will happen when the button is tapped?
let textToShare = "Check this out!"
let activityVC = UIActivityViewController(activityItems: [textToShare], applicationActivities: nil)
present(activityVC, animated: true)
medium
A. The text is copied automatically to clipboard
B. The app crashes due to missing delegate
C. A share sheet appears allowing the user to share the text
D. Nothing happens because the share sheet is not presented
Solution
Step 1: Analyze the code behavior
The code creates a UIActivityViewController with a text item and presents it modally.
Assuming delegate is required to present share sheet
Thinking share sheet appears automatically without present()
Confusing share sheet with clipboard copy
4. Identify the error in the following code that tries to present a share sheet:
let image = UIImage(named: "photo.png")
let activityVC = UIActivityViewController(activityItems: [image], applicationActivities: nil)
present(activityVC, animated: true)
medium
A. present() must be called on the activityVC instance
B. UIActivityViewController requires a delegate to present
C. The activityItems parameter must be a single item, not an array
D. UIImage named "photo.png" may be nil
Solution
Step 1: Check UIImage initialization
UIImage(named:) returns an optional and may be nil if the image is missing.
Step 2: Understand impact on activityItems
Passing nil in activityItems array results in no shareable content.
Final Answer:
UIImage named "photo.png" may be nil -> Option D
Quick Check:
UIImage(named:) can be nil if image missing [OK]
Hint: Always unwrap UIImage before sharing [OK]
Common Mistakes:
Assuming delegate is required for UIActivityViewController
Passing single item instead of array to activityItems
Calling present() on wrong object
5. You want to share both a URL and a text message using UIActivityViewController. Which code snippet correctly sets this up and presents the share sheet?
hard
A. let url = URL(string: "https://example.com")!
let message = "Check this out!"
let activityVC = UIActivityViewController(activityItems: [url, message], applicationActivities: nil)
present(activityVC, animated: true)
B. let url = URL(string: "https://example.com")
let message = "Check this out!"
let activityVC = UIActivityViewController(activityItems: url, applicationActivities: message)
present(activityVC, animated: true)
C. let url = URL(string: "https://example.com")!
let message = "Check this out!"
let activityVC = UIActivityViewController(items: [url, message])
present(activityVC, animated: true)
D. let url = URL(string: "https://example.com")!
let message = "Check this out!"
let activityVC = UIActivityViewController(activityItems: [message], applicationActivities: [url])
present(activityVC, animated: true)
Solution
Step 1: Verify correct initializer usage
UIActivityViewController requires activityItems as an array of items to share and applicationActivities as optional custom activities.
Step 2: Check each option's parameters
let url = URL(string: "https://example.com")!
let message = "Check this out!"
let activityVC = UIActivityViewController(activityItems: [url, message], applicationActivities: nil)
present(activityVC, animated: true) correctly passes an array with URL and text, and nil for applicationActivities.
Step 3: Confirm safe URL unwrapping
let url = URL(string: "https://example.com")!
let message = "Check this out!"
let activityVC = UIActivityViewController(activityItems: [url, message], applicationActivities: nil)
present(activityVC, animated: true) force unwraps URL safely assuming it exists, which is common in examples.
Final Answer:
let url = URL(string: "https://example.com")!
let message = "Check this out!"
let activityVC = UIActivityViewController(activityItems: [url, message], applicationActivities: nil)
present(activityVC, animated: true) -> Option A
Quick Check:
Pass array of items to activityItems [OK]
Hint: Pass all share items in activityItems array [OK]
Common Mistakes:
Passing items or applicationActivities incorrectly
Not using an array for activityItems
Confusing applicationActivities with share content
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.