У меня есть пользовательское всплывающее окно с пером, использующее swiftEntryKit , которое отображает данные от пользователя, на которого щелкнул currentUser.
- У меня есть перо с именем
UserRequestView
- и класс UIView с именем
UserRequestView
- У меня также есть другой класс UIView с именем
UserRequestPreviewView
, который является пользовательским классом nibs и устанавливает все данные в файле nib
когда currentUser выбирает другого пользователя из коллекции ViewView внутри NewHomeViewController
, currentUser отображается с всплывающим экраном, спрашивающим, следует ли отправить запрос на добавление в друзья. Для представления всплывающего окна я использую это:
`SwiftEntryKit.display(entry: UserRequestView(), using: popupAttributes)`
и для загрузки данных в перо:
if let popupView = Bundle.main.loadNibNamed("UserRequestView", owner: self, options: nil)!.first as? UserRequestPreviewView {
popupView.currentUser = self.currentUser
popupView.user = self.users[self.theUserIndex]
}
При запуске проекта и нажатии на пользователя всплывающее окно отображается нормально, и данные загружены в перо, однако изображения и текст на перо не изменились.
для большего контекста, вот класс UserRequestView:
class UserRequestView: UIView {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
init() {
super.init(frame: .zero)
setup()
}
private func setup() {
fromNib()
}
}
метод fromNib
является расширением UIView:
extension UIView {
@discardableResult
func fromNib<T : UIView>() -> T? {
guard let contentView = Bundle(for: type(of: self)).loadNibNamed(type(of: self).className, owner: self, options: nil)?.first as? T else {
return nil
}
addSubview(contentView)
contentView.fillSuperview()
return contentView
}
}
и класс, который я использую для настройки пера для отображения данных:
class UserRequestPreviewView: UIView {
@IBOutlet weak var userProfileImage: roundedImage!
@IBOutlet weak var userFirstLastName: UILabel!
@IBOutlet weak var usersBirthday: UILabel!
@IBOutlet weak var friendsOptionBtn: UIButton!
var currentUser: User!
var user: User! {
didSet {
if currentUser != nil {
print("the current user = \(currentUser.firstName)")
print("this user = \(user.firstName)")
setUp()
}
}
}
var cache = SAMCache.shared()
override func awakeFromNib() {
super.awakeFromNib()
layer.applySketchShadow()
layer.cornerRadius = 20
layer.masksToBounds = false
friendsOptionBtn.layer.cornerRadius = friendsOptionBtn.bounds.height / 2.0
friendsOptionBtn.layer.masksToBounds = true
userProfileImage.layer.cornerRadius = userProfileImage.bounds.height / 2.0
userProfileImage.layer.masksToBounds = true
friendsOptionBtn.isEnabled = true
}
func setUp(){
print("got to set up")
let profileImageKey = "\(user.uid)-profileImage"
if let image = cache?.object(forKey: profileImageKey) as? UIImage{
self.userProfileImage.image = image
print("setting image 1")
}else{
user.downloadProfilePicture { [weak self] (image, error) in
if let image = image {
self?.userProfileImage.image = image
print("setting image 2")
self?.cache?.setObject(image, forKey: profileImageKey)
}else if error != nil {
print(error)
}
}
}
userFirstLastName.text = "\(user.firstName) \(user.lastName)"
usersBirthday.text = "\(user.birthday)"
}
}
Я знаю, что currentUser и пользователь были установлены в перо, потому что операторы печати отображаются в консоли
«нужно настроить» отпечатки, как и «настройка изображения 1»
Я не понимаю, почему изображения и текст не отображаются в перо. у кого-нибудь есть решение? спасибо.