Ich habe eine Tabellenansicht mit expandierenden Zellen. Die expandierenden Zellen stammen aus einer XIB-Datei. In der Klasse der Tabelle befindet sich der gesamte Code, der die Expansions- und Pull-Daten von plist steuert. Ich versuche, eine Schließen-Schaltfläche hinzuzufügen, möchte sie aber nur anzeigen, wenn die Zelle erweitert ist. Wie es aussieht, kann ich nicht auf die Schaltfläche verweisen, um es zu verbergen, weil es in einer anderen Klasse ist. Hier ist, wie ich versuche, darauf zuzugreifen:Objekt kann nicht von einer anderen Klasse aufgerufen werden
import UIKit
class SecondPolandViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var customTableViewCell:CustomTableViewCell? = nil
var items = [[String:String]]()
override func viewDidLoad() {
super.viewDidLoad()
**REFERENCING CLASS**
customTableViewCell = CustomTableViewCell()
let nib = UINib.init(nibName: "CustomTableViewCell", bundle: nil)
self.tableView.register(nib, forCellReuseIdentifier: "cell")
self.items = loadPlist()
}
func loadPlist()->[[String:String]]{
let path = Bundle.main.path(forResource: "PolandResourceList", ofType: "plist")
return NSArray.init(contentsOf: URL.init(fileURLWithPath: path!)) as! [[String:String]]
}
var selectedIndex:IndexPath?
var isExpanded = false
func didExpandCell(){
self.isExpanded = !isExpanded
self.tableView.reloadRows(at: [selectedIndex!], with: .automatic)
}
}
extension SecondPolandViewController:UITableViewDataSource, UITableViewDelegate{
***HIDING BUTTON***
let button = customTableViewCell?.closeButton
button?.isHidden = true
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.selectedIndex = indexPath
self.didExpandCell()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomTableViewCell
cell.selectionStyle = .none
let item = self.items[indexPath.row]
cell.titleLabel.text = item["title"]
cell.shortLabel.text = item["short"]
cell.otherImage.image = UIImage.init(named: item["image"]!)
cell.thumbImage.image = UIImage.init(named: item["image"]!)
cell.longLabel.text = item["long"]
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let height = UIScreen.main.bounds.height
if isExpanded && self.selectedIndex == indexPath{
//return self.view.frame.size.height * 0.6
return 400
}
return 110
//return height * 0.2
}
}
Dies versteckt es jedoch nicht.
Hier ist die Xib, die ich rufe, wenn es hilft. Es ist wahrscheinlich einfach, ich bin nur ein selbsternannter Entwickler.
import UIKit
class CustomTableViewCell: UITableViewCell {
@IBOutlet weak var closeButton: UIImageView!
@IBOutlet weak var otherImage: UIImageView!
@IBOutlet weak var thumbImage: UIImageView!
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var shortLabel: UILabel!
//@IBOutlet weak var longLabel: UITextView!
@IBOutlet weak var longLabel: UITextView!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
//let width = UIScreen.main.bounds.width
//let height = UIScreen.main.bounds.height
//thumbImage.frame.size.width = height * 0.19
//thumbImage.frame.size.height = height * 0.19
}
}
Sie bekommen den Knopf oben auf der Erweiterung und stellen Sie es auf versteckt? Kompiliert das? Nun, würde die Schaltfläche in der CellForRow atIndexPat Func versteckt, wenn IndexPath nicht identisch mit dem ausgewählten ist. Dies sollte den Trick tun. –