从不同 class 调用 UITextField 的内容
Call content of UITextField from different class
我的目标是我可以从容器视图中的 UICollectionViewCell
配置标签。
我有一个带有 UICollectionView
的视图控制器,如果我双击其中一个单元格,则会打开一个容器视图。这已经在工作了,但是我在 ContainerViewController
中有一个 UITextField
应该更新 ItemCell
.
的 nameLabel
如何将文本 属性 从 containerController
获取到 ItemCell func changeName()
?
class ItemCell: UICollectionViewCell {
@IBOutlet weak var nameLabel: UILabel!
func changeName() {
nameLabel.text = containerController.nameField.text
}
}
显然这个功能不起作用。
var containerController = ContainerController()
class ContainerController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBOutlet weak var nameField: UITextField!
}
双击单元格时,将所点击单元格的引用传递给 ContainerController
,然后让 ContainerController
实例调用单元格上的 changeName
函数。我建议改变 changeName
函数以接受 String
,如下所示:
class ItemCell: UICollectionViewCell {
@IBOutlet weak var nameLabel: UILabel!
func changeName(newName: String) {
nameLabel.text = newName
}
}
提供代码后的更新
您可以做的一件事是将 属性 添加到您的 ContainerController
中,如下所示:
weak var textCell: ItemCell?
然后也把ItemCell
中的方法改成取一个String
:
func changeName(newName: String) {
nameLabel.text = newName
}
然后在您的 handleTap(_:)
方法中,您正在检索单元格并调用 openContainer()
,将其更改为如下内容:
if let index = indexPath,
let cell = ItemCollection.cellForItemAtIndexPath(index) as? ItemCell {
container.textCell = cell
openContainer()
} else {
print("Could not find index path or cell")
}
然后在您的 ContainerController
中输入文本后,用新文本调用 textCell?.changeName(_:)
。
我还想补充我不建议这样做。理想情况下,用户在 ContainerController
中输入的文本会更新集合视图的数据源,然后应用程序会重新加载该单元格。按照现在的方式,一旦单元格被重新使用,文本就会恢复为数据源所说的内容。只是需要考虑的事情。
我的目标是我可以从容器视图中的 UICollectionViewCell
配置标签。
我有一个带有 UICollectionView
的视图控制器,如果我双击其中一个单元格,则会打开一个容器视图。这已经在工作了,但是我在 ContainerViewController
中有一个 UITextField
应该更新 ItemCell
.
nameLabel
如何将文本 属性 从 containerController
获取到 ItemCell func changeName()
?
class ItemCell: UICollectionViewCell {
@IBOutlet weak var nameLabel: UILabel!
func changeName() {
nameLabel.text = containerController.nameField.text
}
}
显然这个功能不起作用。
var containerController = ContainerController()
class ContainerController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBOutlet weak var nameField: UITextField!
}
双击单元格时,将所点击单元格的引用传递给 ContainerController
,然后让 ContainerController
实例调用单元格上的 changeName
函数。我建议改变 changeName
函数以接受 String
,如下所示:
class ItemCell: UICollectionViewCell {
@IBOutlet weak var nameLabel: UILabel!
func changeName(newName: String) {
nameLabel.text = newName
}
}
提供代码后的更新
您可以做的一件事是将 属性 添加到您的 ContainerController
中,如下所示:
weak var textCell: ItemCell?
然后也把ItemCell
中的方法改成取一个String
:
func changeName(newName: String) {
nameLabel.text = newName
}
然后在您的 handleTap(_:)
方法中,您正在检索单元格并调用 openContainer()
,将其更改为如下内容:
if let index = indexPath,
let cell = ItemCollection.cellForItemAtIndexPath(index) as? ItemCell {
container.textCell = cell
openContainer()
} else {
print("Could not find index path or cell")
}
然后在您的 ContainerController
中输入文本后,用新文本调用 textCell?.changeName(_:)
。
我还想补充我不建议这样做。理想情况下,用户在 ContainerController
中输入的文本会更新集合视图的数据源,然后应用程序会重新加载该单元格。按照现在的方式,一旦单元格被重新使用,文本就会恢复为数据源所说的内容。只是需要考虑的事情。