2016-04-29 3 views
0

Schalt habe ich es geschafft, eine einfache Darstellung des UIDatePicker mit einer zusätzlichen Tableview Zelle zu erreichen, die als eine entnehmbare Zelle wirkt, das zeigt und verbirgt die DatumsauswahlEin leichter Fehler der Datumsauswahl versteckt, wenn UISwitch auf Aus

Wenn Ich klicke den UISwitch zu On, es zeigt erfolgreich die Zelle mit dem Datum-Label. Wenn ich auf diese Zelle tippe, wird die Datumsauswahl erfolgreich angezeigt.

Beispiel dafür, wie es zeigt es

enter image description here

Das Problem:

enter image description here

sagen, dass ich meine Meinung ändern und entscheiden, kein Datum eingeben, I Schalten Sie die Datumsauswahl aus und die Zelle mit der abgreifbaren UILabel, die die Datumsauswahl anzeigt, verbirgt den Erfolg vollständig, das Hauptproblem ist, wenn ich dies tun, bleibt die Datumsauswahl im Blick, so dass der Benutzer dann klicken und klicken Sie auf die Zelle, um es auszublenden. Ich habe lange gearbeitet, um das herauszufinden, aber vielleicht sehen erfahrene Entwickler, wo ich falsch liege? Hier ist mein Code für diesen View-Controller:

// 
    // ItemTableViewController.swift 
    // Sample App 
    // 
    // 


import UIKit 
import CoreData 

class ItemTableViewController: UITableViewController, UITextViewDelegate, UITextFieldDelegate, UIPopoverPresentationControllerDelegate, IconSelectionDelegate { 



    @IBOutlet weak var dueLabel: UILabel! 
    @IBOutlet weak var datepicker: UIDatePicker! 
    @IBOutlet weak var dateSwitch: UISwitch! 





    var showCell = false // added 
    var datePickerHidden = true 


    override func viewDidLoad() { 

    super.viewDidLoad() 
    title = "Edit" 


    tableView.tableFooterView = UIView() 

} 






// this new 
@IBAction func dateToggle(sender: AnyObject) { 


     showCell = !showCell 
     tableView.reloadData() 


} 



@IBAction func datePickerValue(sender: UIDatePicker) { 
    datePickerChanged() 

} 
func datePickerChanged() { 

    dueLabel.text = NSDateFormatter.localizedStringFromDate(datepicker.date, dateStyle: NSDateFormatterStyle.MediumStyle, timeStyle: NSDateFormatterStyle.ShortStyle) 
} 

// MARK: TableView 

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 



    // Implementation of hidding and showing the picker view 

    //  if indexPath.section == 0 && indexPath.row == 3 { 
    //    
    //   toggleDatepicker() 
    //   print("Selected Section 2 Desired cell") 
    //    
    //    
    //  } else { 
    //   print("You tapped section \(indexPath.section) and row \(indexPath.row)") 
    //  } 


     if dateSwitch.on == true{ 
     print("Its on") 

     if indexPath.section == 0 && indexPath.row == 3 { 

      toggleDatepicker() 
      print("Selected Section 2 Desired cell. section \(indexPath.section) and row \(indexPath.row)") 


     } else { 
      print("You tapped section \(indexPath.section) and row \(indexPath.row)") 

     } 

    } 

    tableView.deselectRowAtIndexPath(indexPath, animated: true) 

} 

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


    //  if datePickerHidden && indexPath.section == 0 && indexPath.row == 4 { 
    //   return 0 
    //  } 
    //  else { 
    //   return super.tableView(tableView, heightForRowAtIndexPath: indexPath) 
    //  } 

    if datePickerHidden && indexPath.section == 0 && indexPath.row == 4 { 
     return 0 
    } 

    else if 3 == indexPath.row && indexPath.section == 0 { 

     return showCell ? 44 : 0; 

    } else { 

     return super.tableView(tableView, heightForRowAtIndexPath: indexPath); 
    } 


} 

func toggleDatepicker() { 

    datePickerHidden = !datePickerHidden 

    tableView.beginUpdates() 
    tableView.endUpdates() 

    } 

    // Core data ... and other things irrelevant... 


    // ... 

    } 
+0

Sie ändern Zustand der lokalen Variablen datePickerHidden der Klasse nicht von versteckten Eigenschaft UIDatePicker, In Ihrem Fall haben Sie cell.clipsToBounds zu tun = Ja in cellForIndexPath. Versuch es. –

Antwort

0

Sie die UIDatePicker explizit auf Makel die Schalter ausgeschaltet verstecken.

@IBAction func dateToggle(sender: AnyObject) { 


    showCell = !showCell 
    if !showCell { 
     datePicker.hidden = true 
    } 
    tableView.reloadData() 

}

+0

Funktioniert irgendwie, aber sobald der Picker versteckt ist, hinterlässt es eine leere Tabellenzelle die Größe des Pickers. Sowieso kann das auch zusammen mit dem Pflücker versteckt werden? – DwellingNYC

+0

Haben Sie den DatePicker auf einer UIView? – Lazy

+0

Der Datumswähler befindet sich auf einer vom Storyboard eingebetteten Zelle. Die Zelle hat ungefähr die Größe 80, so dass der UIPicker ungefähr auf seine Zellengröße eingestellt ist. Wenn also der Picker verschwindet, wenn er eingeschaltet ist, bleibt die Zelle selbst auf der Höhe von 80 leer, während der datePicker ausgeblendet ist. – DwellingNYC

Verwandte Themen