从另一个 class 访问 IBOutlet
Access an IBOutlet from another class
我有 2 个 swift 文件,一个是我的 HomeViewController,第二个是我的 EventCollectionViewCell。在第二个中,我有一个 IBOutlet = informationView :UIView,我想从 HomeViewController 访问它。
有什么办法吗?
先感谢您,
堪萨斯
好吧,我想在 HomeViewController 中你有一个 UICollectionView 并且充当它的数据源,然后在你的 collectionView 数据源中你可以:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cellIdentifier", forIndexPath: indexPath) as! EventCollectionViewCell
//Here you can access the IBOulets define in your cell
cell.informationView.backgroundColor = UIColor.greenColor()
return cell
}
编辑:
问题:当您点击一个单元格时,您想要在单元格内显示一个叠加层。
解决方法:
您需要数据模型来维护状态,无论它是否处于活动状态(informationView),假设 ItemCell
是我的模型(在您的情况下,事件可以是):
class ItemCell{
var active:Bool = false
}
在 collectionView:cellForRowAtIndexPath:
中,您将检查模型的当前状态,并根据该状态显示或隐藏该叠加层:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cellIdentifier", forIndexPath: indexPath) as! EventCollectionViewCell
let event = self.data[indexPath.row]
//Here you can access the IBOulets define in your cell
cell.informationView.hidden = !event.active
return cell
}
然后作为最后一步,每次 select 一个单元格(func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
方法)时,您将更新模型的状态:
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath){
let event = self.data[indexPath.row]
event.active = !event.active
collectionView.reloadData()
}
如果您要在界面生成器中创建单元格,请按照 Jose 的回答进行操作。将 Identity Inspector 中单元格的 class 设置为 EventCollectionViewCell,并将单元格标识符设置为 Jose 指定的 "cellIdentifier"。
为该单元格声明一个 属性 并通过该对象访问 IbOutlets。
@属性(非原子,强)MSSearchHeaderView *searchHeaderView;
if (self.searchHeaderView.searchTextField.text.length <= 0) {
self.searchHeaderView.clearButton.hidden = YES;
}其他{
self.searchHeaderView.clearButton.hidden = NO;
}
我有 2 个 swift 文件,一个是我的 HomeViewController,第二个是我的 EventCollectionViewCell。在第二个中,我有一个 IBOutlet = informationView :UIView,我想从 HomeViewController 访问它。
有什么办法吗? 先感谢您, 堪萨斯
好吧,我想在 HomeViewController 中你有一个 UICollectionView 并且充当它的数据源,然后在你的 collectionView 数据源中你可以:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cellIdentifier", forIndexPath: indexPath) as! EventCollectionViewCell
//Here you can access the IBOulets define in your cell
cell.informationView.backgroundColor = UIColor.greenColor()
return cell
}
编辑:
问题:当您点击一个单元格时,您想要在单元格内显示一个叠加层。
解决方法:
您需要数据模型来维护状态,无论它是否处于活动状态(informationView),假设 ItemCell
是我的模型(在您的情况下,事件可以是):
class ItemCell{
var active:Bool = false
}
在 collectionView:cellForRowAtIndexPath:
中,您将检查模型的当前状态,并根据该状态显示或隐藏该叠加层:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cellIdentifier", forIndexPath: indexPath) as! EventCollectionViewCell
let event = self.data[indexPath.row]
//Here you can access the IBOulets define in your cell
cell.informationView.hidden = !event.active
return cell
}
然后作为最后一步,每次 select 一个单元格(func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
方法)时,您将更新模型的状态:
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath){
let event = self.data[indexPath.row]
event.active = !event.active
collectionView.reloadData()
}
如果您要在界面生成器中创建单元格,请按照 Jose 的回答进行操作。将 Identity Inspector 中单元格的 class 设置为 EventCollectionViewCell,并将单元格标识符设置为 Jose 指定的 "cellIdentifier"。
为该单元格声明一个 属性 并通过该对象访问 IbOutlets。
@属性(非原子,强)MSSearchHeaderView *searchHeaderView;
if (self.searchHeaderView.searchTextField.text.length <= 0) {
self.searchHeaderView.clearButton.hidden = YES;
}其他{
self.searchHeaderView.clearButton.hidden = NO;
}