我是Swift / iOS开发的新手,所以这可能是一个愚蠢的问题,但我似乎无法正确地找到如何做到这一点。
我正在关注如何在Swift中以编程方式编码(无故事板)登录屏幕并将用户注册到Firebase数据库的YouTube指南。设计的基本概要如下
用户点击带有表冠的猫的图标后,图像选择器会出现,他们可以选择个人资料图片然后像平常一样注册。如果用户未从选择器中选择图像,则默认情况下会将带冠顶的猫图标作为配置文件图片加载。
我一直想做的是让它变得如此不同(不是猫,而不是在登录页面上向用户显示)名为" 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问题,但是非常感谢任何帮助,提示或指示。谢谢!
答案 0 :(得分:1)
您需要处理取消事件的委托方法。 UIImagepickercontrolledelegate有另一种方法 的 imagePickerControllerDidCancel() 强>
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
imageView.image = UIImage(named: "nedstark")
dismiss(animated: true, completion: nil)
}
当你点击pickerviewcontroller中的取消按钮时, didfinishPickingMedia 功能不会打电话。这样,当您点击取消按钮时,您的默认图像就不会被设置。