0
ソーシャルネットワーキングアプリを作っています。ユーザーが新しい投稿を作成したときに、彼らの投稿への写真は任意ですが、キャプションが必要です。アプリを作るときは、写真をオプションにしたいのですが、新しい投稿を作成するときにキャプションが必要です。
私はSwift 3とXcode 8.2.1を使用しています。また、Google Firebaseをサービスとしてのモバイルバックエンド(MBAAS)として使用しています。
以下が私のコードです:
import UIKit
import FirebaseStorage
import Firebase
import FirebaseDatabase
class NewPostViewController: UIViewController {
@IBOutlet weak var photo: UIImageView!
@IBOutlet weak var caption: UITextView!
@IBOutlet weak var postButton: UIButton!
var selectedImage: UIImage?
override func viewDidLoad() {
super.viewDidLoad()
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.handleSelectPhoto))
photo.addGestureRecognizer(tapGesture)
photo.isUserInteractionEnabled = true
}
func handleSelectPhoto() {
let pickerController = UIImagePickerController()
pickerController.delegate = self
present(pickerController, animated: true, completion: nil)
}
@IBAction func postButton(_ sender: Any) {
ProgressHUD.show("Loading...", interaction: false)
if let postImage = self.selectedImage, let imageData = UIImageJPEGRepresentation(postImage, 0.1) {
let photoID = NSUUID().uuidString
let storageRef = Storage.storage().reference(forURL: "gs://bruh-b7907.appspot.com/").child("post_photos").child(photoID)
storageRef.putData(imageData, metadata: nil, completion: { (metadata, error) in
if error != nil {
ProgressHUD.showError("Could not post")
return
}
let postImageUrl = metadata?.downloadURL()?.absoluteString
self.sendDataToDatabase(photoUrl: postImageUrl!)
})
}
}
func sendDataToDatabase(photoUrl: String) {
let ref = Database.database().reference()
let postsReference = ref.child("posts")
let newPostId = postsReference.childByAutoId().key
let newPostReference = postsReference.child(newPostId)
newPostReference.setValue(["postPhotoUrl": photoUrl, "caption": caption.text!], withCompletionBlock: {
(error,ref) in
if error != nil {
ProgressHUD.showError("Could not post")
return
}
ProgressHUD.showSuccess("Successfully Posted")
})
}
}
extension NewPostViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let image = info["UIImagePickerControllerOriginalImage"] as? UIImage{
selectedImage = image
photo.image = image
}
dismiss(animated: true, completion: nil)
}
}
をチェックするためにガード文を追加します。あなたは彼らが写真やたびに投稿するとき、キャプションが必要な意味ですか? –
写真があるかどうかにかかわらずキャプションが必要です –