일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- oj
- c++
- a형
- 역량테스트
- 7576
- IOS
- xcode
- 풀이
- oj구축
- 소스코드
- 삼성기출
- SW역량테스트
- 온라인저지시스템구축
- 모의 SW역량테스트
- 백준
- 알고리즘
- 모의 SW 역량테스트
- 삼성
- hustoj
- SWIFT
- STL
- BOJ
- SW Expert Academy
- 개발
- 온라인 저지 구축
- 구축
- 저지시스템구축
- SWEA
- 비트마스킹
- 역테
- Today
- Total
꾸르꾸르
[iOS/Swift] UIActivityViewController - 파일 공유 하는법 (share 기능) - iphone 본문
[iOS/Swift] UIActivityViewController - 파일 공유 하는법 (share 기능) - iphone
GGUGGU- 2020. 4. 19. 12:19다시 포스팅 시작!
오늘은 iOS에서 파일을 다른앱 또는 내 아이폰에 저장하기 등을 하기 위해 share panel을 띄우고 거기로 파일을 공유하는 방법에 대해 알아보려고 합니다.
share panel이 뭔데? 라고 하시는분들이 계실거에요.
바로바로바로 이것입니다.
다들 이런 화면 한번쯤 보신적 있을꺼에요 ! (안드로이드에도 있는 기능이죠~! )
무언가를 공유하기 눌렀을때 밑에서 슝 하고 올라오는 이것!
이것을 share panel 이라고 부릅니다.
그럼 이 share(공유하기) 기능을 사용해보도록 하죠.ㅎㅎ
일단 xcode에서 테스트 프로젝트를 하나 만들어줍니다.
이렇게하고 프로젝트 생성!
하고 바로 main스토리보드로 가서 버튼 1개를 만듭시다!
이제 요 버튼이 눌리면 짠하고 share패널이 뜨게 해볼거에요~
요렇게 버튼을 뷰컨트롤러에 가져와주고 버튼 클릭시 액션도 가져와줍니다.
그리고 코딩해줍시당
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var shareButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func doShare(_ sender: Any) {
let shareText: String = "share text test!"
var shareObject = [Any]()
shareObject.append(shareText)
let activityViewController = UIActivityViewController(activityItems : shareObject, applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view
//activityViewController.excludedActivityTypes = [UIActivity.ActivityType.airDrop, UIActivity.ActivityType.postToFacebook,UIActivity.ActivityType.postToTwitter,UIActivity.ActivityType.mail]
self.present(activityViewController, animated: true, completion: nil)
}
}
사실 안에 내용은 별로 없고
shareObject 요거를 Any배열로 만들어서 뭐든 집어 넣으시면됩니다.
텍스트던 url이던 동영상이던 파일이던.. 해서 배열에 append하고 UIActivityViewController를 만들어서 present를 뿅 하고 해주시면 됩니다.
주석 쳐놓은 excludedActivityTypes는 말그대로 공유 기능시 제외하고 싶은 어플을 등록하시는겁니다.
저기에 저렇게 추가해놓으면 공유하기 누를시 해당 어플이 안뜹니당.
그리고 실행해보시면
요런식으로 짜잔하고 뜹니다!~
여기서 한발짝 더 나아가볼까요?
이제 쉐어를 성공했을때, 취소버튼을 눌렀을때, 쉐어도중 에러가 발생했을때 뭔가 새로운 처리를 해주고 싶은 경우 어떻게 해야할까요?
바로 completionWithItemsHandler 를 이용해주는것입니다!
이걸이용해서 성공 취소 에러했을때 toast메시지가 나오게 해보겠습니다.
(toast 메시지를 나오게 하는 방법은 해당 포스팅을 참고해주세요.)
https://royhelen.tistory.com/46
코드를 추가해봅시다!
activityViewController.completionWithItemsHandler = { (activityType: UIActivity.ActivityType?, completed: Bool, arrayReturnedItems: [Any]?, error: Error?) in
if completed {
self.showToast(message: "share success")
} else {
self.showToast(message: "share cancel")
}
if let shareError = error {
self.showToast(message: "\(shareError.localizedDescription)")
}
}
뭐 코드는 어렵지 않죠?
위에서 만드신 코드에서 self.present 뒤에다가 이걸 붙여넣어주시면 끝!
그럼 어떻게 작동되는지 직접 봐야겠죠?
일단 아까 만든 프로젝트에서 share버튼을 눌러서 share패널을 띄워봅시다.
이 상태에서 copy 버튼을 눌러줍니다. 어떤 동작이든 상관없어요. 저기서 어떤 action을 취해줍니다 (x표누르는것만 빼구요)
이번엔 X를 눌러볼까요?
요렇게 짜잔~ 실행됩니다!
즉 아까 if completed구문에 완료시 동작, cancel시 동작을 넣어주면 됩니다!
또한 에러시에 동작도 처리해줄수있겠죠~
프로젝트에 사용된 코드 전체를 보시려면 밑에 더보기를 클릭하세요
//
// ViewController.swift
// SharePanelPractice
//
// Created by royhelen on 2020/04/19.
// Copyright © 2020 royhelen. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var shareButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func doShare(_ sender: Any) {
let shareText: String = "share text test!"
var shareObject = [Any]()
shareObject.append(shareText)
let activityViewController = UIActivityViewController(activityItems : shareObject, applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view
//activityViewController.excludedActivityTypes = [UIActivity.ActivityType.airDrop, UIActivity.ActivityType.postToFacebook,UIActivity.ActivityType.postToTwitter,UIActivity.ActivityType.mail]
self.present(activityViewController, animated: true, completion: nil)
activityViewController.completionWithItemsHandler = { (activityType: UIActivity.ActivityType?, completed: Bool, arrayReturnedItems: [Any]?, error: Error?) in
if completed {
self.showToast(message: "share success")
} else {
self.showToast(message: "share cancel")
}
if let shareError = error {
self.showToast(message: "\(shareError.localizedDescription)")
}
}
}
func showToast(message : String, font: UIFont = UIFont.systemFont(ofSize: 14.0)) {
let toastLabel = UILabel(frame: CGRect(x: self.view.frame.size.width/2 - 75, y: self.view.frame.size.height-100, width: 150, height: 35))
toastLabel.backgroundColor = UIColor.black.withAlphaComponent(0.6)
toastLabel.textColor = UIColor.white
toastLabel.font = font
toastLabel.textAlignment = .center;
toastLabel.text = message
toastLabel.alpha = 1.0
toastLabel.layer.cornerRadius = 10;
toastLabel.clipsToBounds = true
self.view.addSubview(toastLabel)
UIView.animate(withDuration: 4.0, delay: 0.1, options: .curveEaseOut, animations: {
toastLabel.alpha = 0.0
}, completion: {(isCompleted) in
toastLabel.removeFromSuperview()
})
}
}
ipad에서는 조금 더 줘야하는 설정들이 있는데 이건 요 포스팅을 참고해주세요!
https://royhelen.tistory.com/53
'개발 > Swift' 카테고리의 다른 글
[iOS/Swift] UIActivityViewController - 파일 공유 하는법 (share 기능) - ipad (1) | 2020.05.05 |
---|---|
[iOS/Swift] Toast Message 만들기 (0) | 2020.04.25 |