在Swift(iOS)

时间:2018-01-13 02:52:24

标签: ios swift uiimagepickercontroller

我是Swift / iOS开发的新手,所以这可能是一个愚蠢的问题,但我似乎无法正确地找到如何做到这一点。

我正在关注如何在Swift中以编程方式编码(无故事板)登录屏幕并将用户注册到Firebase数据库的YouTube指南。设计的基本概要如下

enter image description here

用户点击带有表冠的猫的图标后,图像选择器会出现,他们可以选择个人资料图片然后像平常一样注册。如果用户未从选择器中选择图像,则默认情况下会将带冠顶的猫图标作为配置文件图片加载。

我一直想做的是让它变得如此不同(不是猫,而不是在登录页面上向用户显示)名为" nedstark" 是设置为存储在数据库中的默认配置文件图片。

该程序使用LoginController.swift和LoginController + handlers.swift文件来实现这一点。我试图向选择器添加一个条件,如果没有选择,默认配置文件pic设置为特定的默认用户pic(不同于cat),但它不起作用。

这是将照片和其他用户信息存储到数据库中的代码

            let imageName = NSUUID().uuidString
        let storageRef = Storage.storage().reference().child("profile_images").child("\(imageName).jpg")

        if let profileImage = self.profileImageView.image, let uploadData = UIImageJPEGRepresentation(profileImage, 0.1) {

            storageRef.putData(uploadData, metadata: nil, completion: { (metadata, error) in

                if let error = error {
                    print(error)
                    return
                }

                if let profileImageUrl = metadata?.downloadURL()?.absoluteString {

                    let values = ["name": name, "email": email, "profileImageUrl": profileImageUrl]

                    self.registerUserIntoDatabaseWithUID(uid, values: values as [String : AnyObject])
                }
            })
        }

这是我尝试设置默认配置文件的代码

func handleSelectProfileImageView() {
    let picker = UIImagePickerController()

    picker.delegate = self
    picker.allowsEditing = true

    present(picker, animated: true, completion: nil)
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    var selectedImageFromPicker: UIImage?

    if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage {
        selectedImageFromPicker = editedImage
    } else if let originalImage = info["UIImagePickerControllerOriginalImage"] as? UIImage {
        selectedImageFromPicker = originalImage
    }
    else {  //Testing if default profile pic set
        selectedImageFromPicker = UIImage(named: "nedstark")
    }

    if let selectedImage = selectedImageFromPicker {
        profileImageView.image = selectedImage
    }
    else {  //Testing if default profile pic set
        profileImageView.image = UIImage(named: "nedstark")
    }
    dismiss(animated: true, completion: nil)

}

我 我知道这是一个完全的noob问题,但是非常感谢任何帮助,提示或指示。谢谢!

1 个答案:

答案 0 :(得分:1)

您需要处理取消事件的委托方法。 UIImagepickercontrolledelegate有另一种方法 的 imagePickerControllerDidCancel()

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    imageView.image = UIImage(named: "nedstark")
    dismiss(animated: true, completion: nil)
}

当你点击pickerviewcontroller中的取消按钮时, didfinishPickingMedia 功能不会打电话。这样,当您点击取消按钮时,您的默认图像就不会被设置。