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
Das Problem:
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...
// ...
}
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. –