webentwicklung-frage-antwort-db.com.de

Erweitern und Reduzieren Sie Tableview-Zellen

Ich bin in der Lage, Zellen zu erweitern und zu reduzieren, aber ich möchte Funktionen in UITableViewCell aufrufen (erweitern und reduzieren), um den Schaltflächentitel zu ändern.

 Iphone 5

 import UIKit 

 Klasse MyTicketsTableViewController: UITableViewController {

 var selectedIndexPath: NSIndexPath? 
 var extraHeight: CGFloat = 100 

 Überschreiben Sie func viewDidLoad () {
 super.viewDidLoad () 
 } 

 Überschreiben Sie func didReceiveMemoryWarning () {
 super.didReceiveMemoryWarning () 
 // Entsorgen Sie alle Ressourcen, die neu erstellt werden können .
 } 

 Überschreiben Sie func tableView (tableView: UITableView, numberOfRowsInSection-Abschnitt: Int) -> Int {
 zurück 5 
 } 

 Überschreiben Sie func tableView (tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
 let cell = tableView.dequeueReusableCellWithIdentifier ("cell", forIndexPath: indexPath) als! MyTicketsTableViewCell 
 Zelle zurückgeben 
 } 

 Überschreiben Sie func tableView (tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
 if (selectedIndexPath! = nil && indexPath.compare (selectedIndexPath!) == NSComparisonResult.OrderedSame) {
 return 230 + extraHohe 
 } 

 Rückgabe 230.0 
 } 

 Überschreiben Sie func tableView (tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
 if (selectedIndexPath == indexPath) {
 selectedIndexPath = nil 
 } else {
 selectedIndexPath = indexPath 
 } 

 tableView.beginUpdates () 
 tableView.endUpdates () 
 } 
} 

 import UIKit 

 Klasse MyTicketsTableViewCell: UITableViewCell {

 @IBOutlet schwache var expandButton: ExpandButton! 
 @IBOutlet schwache Var detailsHeightConstraint: NSLayoutConstraint! 

 var defaultHeight: CGFloat! 

 Überschreiben Sie func awakeFromNib () {
 super.awakeFromNib () 

 defaultHeight = detailsHeightConstraint.constant 

 expandButton.button.setTitle ("TAP FOR DETAILS", fürState: .Normal) 
 detailsHeightConstraint.constant = 30 
 } 

 func expand () {
 UIView.animateWithDuration (0,3, Verzögerung: 0,0, Optionen: .CurveLinear, Animationen: {
 Self.expandButton.arrowImage.transform = CGAffineTransformMakeRotation (CGFloat (M_PI * 0.99)) 
__. self.layoutIfNeeded () 

}, Fertigstellung: {Fertiggestellt in 
 self.expandButton.button.setTitle ("CLOSE", fürState: .Normal) 
}) 
 } 

 func collapse () {
 UIView.animateWithDuration (0.3, Verzögerung: 0.0, Optionen: .CurveLinear, Animationen: {
 Self.expandButton.arrowImage.transform = CGAffineTransformMakeRotation (CGFloat (M_PI * 0.0)) 
 self.detailsHeightConstraint.constant () ) 
 self.layoutIfNeeded () 

}, Fertigstellung: {Fertiggestellt in 
 self.expandButton.button.setTitle ("TAP FOR DETAILS", fürState: .Normal) 
}
 } 

} 

16
Ahmet A.

Wenn Sie möchten, dass die Zelle physisch größer wird, verwenden Sie an Ihrem Speicher IndexPath in heightForRow: Folgendes:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if selectedIndexPath == indexPath {
      return 230 + extraHeight
    }
    return 230.0
}

Wenn Sie dann eine in didSelectRow erweitern möchten:

selectedIndexPath = indexPath
tableView.beginUpdates
tableView.endUpdates

Bearbeiten

Dadurch werden die Zellen animiert, sich zu vergrößern, Sie benötigen keine zusätzlichen Animationsblöcke in der Zelle.

Bearbeiten 2  

 override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        if(selectedIndexPath == indexPath) {
          selectedIndexPath = nil

          if let cell = tableView.cellForRowAtIndexPath(indexPath) as? MyTicketsTableViewCell {
            cell.collapse()
          }
          if let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow:indexPath.row+1, section: indexPath.section) as? MyTicketsTableViewCell {
            cell.collapse()
          }
        } else {
          selectedIndexPath = indexPath

          if let cell = tableView.cellForRowAtIndexPath(indexPath) as? MyTicketsTableViewCell {
              cell.expand()
          }

          if let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow:indexPath.row+1, section: indexPath.section) as? MyTicketsTableViewCell {
             cell.expand()
          }
        }

        tableView.beginUpdates()
        tableView.endUpdates()
    }
20
SeanLintern88

Sie müssen nur UITableView Delegate folgendermaßen implementieren:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

EstimHeight ist standardmäßig CGRectZero. Wenn Sie einen Wert festlegen, wird die automatische Größenänderung aktiviert (dieselbe Situation wie bei UICollectionView). Sie können dies auch tun:

tableView?.estimatedRowHeight = CGSizeMake(50.f, 50.f); 

Dann müssen Sie Ihre Einschränkungen in Ihrer Zelle einrichten.

Überprüfen Sie diesen Beitrag: https://www.hackingwithswift.com/read/32/2/automatically-resizing- fitviewcells-with-dynamic-type-and-ns

Ich hoffe es hilft)

2
Alex Kosyakov

Fügen Sie in der MyTicketsTableViewController-Klasse in der cellForRowAtIndexPath-Datenquellenmethode ein Ziel für die Schaltfläche hinzu.

cell.expandButton.addTarget(self, action: "expandorcollapsed:", forControlEvents: UIControlEvents.TouchUpInside)
0
Jeyamahesan