2016-09-23 1 views
1

Wie kann ich ein "cellBOTTOM" am Ende eines UITableView platzieren? Ich dachte daran, die Fußzeile der Tabellenansicht zu verwenden, aber dies führte dazu, dass die Fußzeile nicht unten am Bildschirm blieb, sondern direkt unterhalb der "cellLAST", wenn nicht genügend Zellen zum Ausfüllen des gesamten Bildschirms vorhanden waren. Ich brauche die „cellBOTTOM“ am unteren Rand des Bildschirms und unten in der Tabelle seinPlatzieren Sie eine Zelle am unteren Rand von uitableview

+--------------------+ +--------------------+ +--------------------+ 
|  SCREEN  | |  SCREEN  | |  SCREEN  | 
| +----------------+ | | +----------------+ | | +----------------+ | 
| |  TABLE  | | | |  TABLE  | | | |  TABLE  | | 
| | +------------+ | | | | +------------+ | | | | +------------+ | | 
| | | cellLAST | | | | | | cell 1 | | | | | | cell 1 | | | 
| | +------------+ | | | | +------------+ | | | | +------------+ | | 
| |    | | | | +------------+ | | | | +------------+ | | 
| |    | | | | | cellLAST | | | | | | cell 2 | | | 
| |    | | | | +------------+ | | | | +------------+ | | 
| |    | | | |    | | | | +------------+ | | 
| |    | | | |    | | | | | cell 3 | | | 
| |    | | | |    | | | | +------------+ | | 
| | +------------+ | | | | +------------+ | | | | +------------+ | | 
| | | cellBOTTOM | | | | | | cellBOTTOM | | | | | | cell 4 | | | 
| | +------------+ | | | | +------------+ | | | | +------------+ | | 
| +----------------+ | | +----------------+ | | | +------------+ | | 
+--------------------+ +--------------------+ +-+ | cellLAST | +-+ 
                 | +------------+ | 
                 | +------------+ | 
                 | | cellBOTTOM | | 
                 | +------------+ | 
                 +----------------+ 
+0

Haben Sie über Abschnitt Fußzeile Ansicht denken? nicht die Fußzeile der Tabelle und sie umschließt deine Sektion schön – Tj3n

+0

Wie soll die untere Zelle aussehen? Ist es eine Variation der Standardzelle oder etwas völlig anderes? – Sparky

+0

@Sparky kann beides sein. Es macht mir nichts aus, keine Zelle zu benutzen und vielleicht auch nur einen Blick außerhalb des Tisches oder so. Aber ich brauche es so zu verhalten, wie ich es brauche – WKL

Antwort

0

ich einen kurzen Blick auf das über dem Mittagessen genommen haben. Ich dachte ursprünglich, dass dies durch Überschreiben von ScrollViewDidScroll geschehen könnte, aber ich konnte es nicht auf diese Weise lösen. Die Antwort, die ich gefunden habe, ist, dynamisch zu entscheiden, ob die Tabelle eine Fußzeilenansicht anzeigen soll oder nicht.

In dem folgenden Code (der grob ist, aber sollte Ihnen die Idee), testen wir, ob die Anzahl der Zeilen der Tabelle größer ist als die Menge, die wir auf dem Bildschirm haben möchten (in diesem Fall habe ich dies fest codiert) bis 10). Wenn dies der Fall ist, erstellen wir eine Fußzeile aus dem letzten Element des Quelldatenarrays und legen die Fußzeilenhöhe auf die gleiche Höhe wie die anderen Zellen mit einer anderen Hintergrundfarbe fest. Wenn nicht, dann testen wir cellForItemAtIndexPath verwenden, ob wir in der letzten Zeile der Datasource sind, in diesem Fall werden wir die Zelle entsprechend formatiert werden:

import UIKit 

class ViewController: UIViewController { 

    var myTrackingTableViewController : TrackingTableViewController! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     let sourceData : [String] = { 
      var sD : [String] = [String]() 
      for count in 0..<50 {   // Use the top end of this loop to configure the number of rows in the tableview 
       sD.append("Number \(count)") 
      } 
      return sD 
     }() 

     myTrackingTableViewController = TrackingTableViewController(sourceData: sourceData, numberOfRowsOnScreen: 10, style: UITableViewStyle.plain) 

     self.view.addSubview(myTrackingTableViewController.tableView) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

class TrackingTableViewController : UITableViewController { 

    let sourceData : [String] 
    var footerText : String! 
    var footerInline : Bool = false 

    init(sourceData: [String], numberOfRowsOnScreen: Int, style: UITableViewStyle) { 
     self.sourceData = sourceData 
     super.init(style: style) 

     if self.sourceData.count > numberOfRowsOnScreen { 
      self.footerText = sourceData.last 
     } 
     else 
     { 
      footerInline = true 
     } 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    override func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     if footerInline { 
      return sourceData.count 
     } 
     return sourceData.count - 1 
    } 

    override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { 
     if footerText != nil { 
      return self.tableView.frame.height/10 
     } 
     return 0 
} 

    override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { 
     if footerText != nil { 
      let cell = UITableViewCell() 
      cell.frame = CGRect(origin: CGPoint(x: 0, y: self.tableView.frame.height - self.tableView.rowHeight), size: CGSize(width: self.tableView.frame.width, height: self.tableView.frame.height/CGFloat(10))) 
      cell.backgroundColor = UIColor.red 

      let textLabel = UILabel(frame: CGRect(origin: CGPoint.zero, size: cell.frame.size)) 
      textLabel.text = footerText 

      cell.addSubview(textLabel) 

      return cell 
     } 
     return nil 
    } 

    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
     return self.tableView.frame.height/10 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") 

     let cell = tableView.dequeueReusableCell(withIdentifier: "cell") ?? UITableViewCell() 

     // Clean 

     for subview in cell.subviews { 
      subview.removeFromSuperview() 
     } 

     // Configure 

     if indexPath.row == sourceData.count - 1 && footerInline { 
      cell.backgroundColor = UIColor.red 
     } 
     else 
     { 
      cell.backgroundColor = UIColor.blue 
     } 

     let textLabel = UILabel(frame: CGRect(origin: CGPoint.zero, size: cell.frame.size)) 
     textLabel.text = sourceData[indexPath.row] 

     cell.addSubview(textLabel) 

     return cell 
    } 
} 

Um dies zu testen, ändern Sie den Bereich der für ... Schleife in viewDidLoad von 0 .. < 5 bis 0 .. < 50. Sie werden sehen, dass das Verhalten dem entspricht, was Sie erreichen wollten.

Hoffe, dass hilft!

Verwandte Themen