Swift - 为 UICollectionViewCell 选择图像和标签
Swift - pick image and label for UICollectionViewCell
现在我有一个 collectionView,我可以在其中通过点击 "addCell" 添加单元格。
我的目标是,如果用户点击 "addCell" 一个视图,用户可以在其中输入单元格的标题和 select 像这样的图像:
知道我如何实现这一点吗?
class ContentCell: UICollectionViewCell {
let testImage: UIImageView = {
let v = UIImageView()
v.translatesAutoresizingMaskIntoConstraints = false
v.backgroundColor = .cyan
return v
}()
let testLabel: UILabel = {
let v = UILabel()
v.translatesAutoresizingMaskIntoConstraints = false
v.text = "Test Label"
v.font = UIFont(name: "Avenir Next-Bold", size: 18)
v.textColor = .darkGray
v.textAlignment = .center
return v
}()
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
commonInit()
}
func commonInit() -> Void {
contentView.addSubview(testLabel)
contentView.addSubview(testImage)
NSLayoutConstraint.activate([
testImage.topAnchor.constraint(equalTo: contentView.topAnchor),
testImage.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
testImage.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
testImage.heightAnchor.constraint(equalToConstant:150),
testLabel.topAnchor.constraint(equalTo: testImage.bottomAnchor,constant: 1),
testLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
testLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
testLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
])
}
}
所以在 didSelectItemAtIndexPath
中,您呈现视图控制器以请求图像图像和标题,然后在该视图控制器中声明一个委托或完成处理程序,当用户按下 "done" 或"save" 在他们选择图像和标题的视图控制器中,然后调用委托或完成处理程序,然后使用单元格告诉原始视图控制器添加您刚刚创建的项目并重新加载 collectionView。这是非常标准的东西,您需要学习如何使用相同的模式,因为大多数应用程序每个应用程序都会使用相同的模式 100 次。我可以从 Objective-C 向您展示,但不会浪费我的时间展示这是 Swift。 lmk 如果您需要更多帮助。祝你好运
哦,是的,为了将来的参考,最好坚持使用委托,因为当您遇到嵌套完成的情况并且仍然需要维护对控制器的先弱后强引用时,使用完成处理程序会变得非常棘手。经过两个程度的弱化和强化 "self" 系统将开始随机释放你的控制器。坚持委派。
现在我有一个 collectionView,我可以在其中通过点击 "addCell" 添加单元格。
我的目标是,如果用户点击 "addCell" 一个视图,用户可以在其中输入单元格的标题和 select 像这样的图像:
知道我如何实现这一点吗?
class ContentCell: UICollectionViewCell {
let testImage: UIImageView = {
let v = UIImageView()
v.translatesAutoresizingMaskIntoConstraints = false
v.backgroundColor = .cyan
return v
}()
let testLabel: UILabel = {
let v = UILabel()
v.translatesAutoresizingMaskIntoConstraints = false
v.text = "Test Label"
v.font = UIFont(name: "Avenir Next-Bold", size: 18)
v.textColor = .darkGray
v.textAlignment = .center
return v
}()
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
commonInit()
}
func commonInit() -> Void {
contentView.addSubview(testLabel)
contentView.addSubview(testImage)
NSLayoutConstraint.activate([
testImage.topAnchor.constraint(equalTo: contentView.topAnchor),
testImage.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
testImage.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
testImage.heightAnchor.constraint(equalToConstant:150),
testLabel.topAnchor.constraint(equalTo: testImage.bottomAnchor,constant: 1),
testLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
testLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
testLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
])
}
}
所以在 didSelectItemAtIndexPath
中,您呈现视图控制器以请求图像图像和标题,然后在该视图控制器中声明一个委托或完成处理程序,当用户按下 "done" 或"save" 在他们选择图像和标题的视图控制器中,然后调用委托或完成处理程序,然后使用单元格告诉原始视图控制器添加您刚刚创建的项目并重新加载 collectionView。这是非常标准的东西,您需要学习如何使用相同的模式,因为大多数应用程序每个应用程序都会使用相同的模式 100 次。我可以从 Objective-C 向您展示,但不会浪费我的时间展示这是 Swift。 lmk 如果您需要更多帮助。祝你好运
哦,是的,为了将来的参考,最好坚持使用委托,因为当您遇到嵌套完成的情况并且仍然需要维护对控制器的先弱后强引用时,使用完成处理程序会变得非常棘手。经过两个程度的弱化和强化 "self" 系统将开始随机释放你的控制器。坚持委派。