[英]swift ios adding date picker to an alert in swift to be saved to local db using core data
我正在使用帶有文本字段輸入的警報來保存數據,我想知道的是我想向警報添加一個日期選擇器,以便用戶添加名稱和日期。 我已經可以保存名稱,但是在添加日期選擇器代碼以及如何將其添加到警報時遇到了問題。 代碼如下。
警報代碼:
if indexPath.row == 0 {
let alert = UIAlertController(title: "Add New Chore", message: "", preferredStyle:
UIAlertControllerStyle.alert)
//this is the field where the user add the name
alert.addTextField(configurationHandler: textFieldHandler)
let a = loggedInUsername
if ((a?.lowercased().range(of: "mother")) != nil) {
print("true")
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler:{ (UIAlertAction)in
let newItem : String = (alert.textFields?.first?.text)!
if !newItem.isEmpty {
let item = Item(name: newItem)
// let item2 = Item(name: newItem2)
self.saveItemInLocalDB(groceryItem: item!)
self.setUpCollectionView()
}
}))
使用核心數據保存到本地數據庫的代碼:
func saveItemInLocalDB(groceryItem : Item) {
let context = getContext()
//retrieve the entity that we just created
let entity = NSEntityDescription.entity(forEntityName: "GroceryItem", in: context)
let item = NSManagedObject(entity: entity!, insertInto: context)
//set the entity values
item.setValue(groceryItem.name, forKey: "name")
item.setValue(false, forKey: "isSelected")
item.setValue(loggedInUserHouseNumber, forKey: "houseNo")
//save the object
do {
try context.save()
print("ang item:", groceryItem.name)
print("saved!")
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
} catch {
}
}
將日期選擇器添加到 Swift 5 中的警報
let myDatePicker: UIDatePicker = UIDatePicker()
myDatePicker.timeZone = .local
myDatePicker.preferredDatePickerStyle = .wheels
myDatePicker.frame = CGRect(x: 0, y: 15, width: 270, height: 200)
let alertController = UIAlertController(title: "\n\n\n\n\n\n\n\n", message: nil, preferredStyle: .alert)
alertController.view.addSubview(myDatePicker)
let selectAction = UIAlertAction(title: "Ok", style: .default, handler: { _ in
print("Selected Date: \(myDatePicker.date)")
})
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
alertController.addAction(selectAction)
alertController.addAction(cancelAction)
present(alertController, animated: true)
您好您可以使用此代碼:
步驟:-1在頂部取變量:
var datePicker:UIDatePicker = UIDatePicker()
let toolBar = UIToolbar()
步驟:-2使用文本字段創建警報:
//1. Create the alert controller.
let alert = UIAlertController(title: "Some Title", message: "Enter a text", preferredStyle: .alert)
//2. Add the text field. You can configure it however you need.
alert.addTextField { (textField) in
self.doDatePicker()
textField.inputView = self.datePicker
textField.inputAccessoryView = self.toolBar
}
// 3. Grab the value from the text field, and print it when the user clicks OK.
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { [weak alert] (_) in
let textField = alert?.textFields![0] // Force unwrapping because we know it exists.
if textField?.text != ""{
print("Text field: \(textField?.text!)")
}
}))
// 4. Present the alert.
self.present(alert, animated: true, completion: nil)
步驟:-3調用此函數
func doDatePicker(){
// DatePicker
// datePicker = UIDatePicker()
self.datePicker = UIDatePicker(frame:CGRect(x: 0, y: self.view.frame.size.height - 220, width:self.view.frame.size.width, height: 216))
self.datePicker.backgroundColor = UIColor.white
datePicker.datePickerMode = .date
// ToolBar
toolBar.barStyle = .default
toolBar.isTranslucent = true
toolBar.tintColor = UIColor(red: 92/255, green: 216/255, blue: 255/255, alpha: 1)
toolBar.sizeToFit()
// Adding Button ToolBar
let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(HomeNewVC.doneClick))
let spaceButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(HomeNewVC.cancelClick))
toolBar.setItems([cancelButton, spaceButton, doneButton], animated: true)
toolBar.isUserInteractionEnabled = true
self.toolBar.isHidden = false
}
@objc func doneClick() {
let dateFormatter1 = DateFormatter()
dateFormatter1.dateStyle = .medium
dateFormatter1.timeStyle = .none
datePicker.isHidden = true
self.toolBar.isHidden = true
}
@objc func cancelClick() {
datePicker.isHidden = true
self.toolBar.isHidden = true
}
雖然 Thing 可以工作,但在實時我們應該避免在 alertview 中使用 datepicker。
注意:-而不是創建一個彈出窗口,或者使用 .xib 文件,在其中使用 2 個文本字段,然后使用一個作為名稱,第二個作為日期選擇器。
否則,您也可以使用此第三方支持,這在一定程度上符合您的要求:-警報修改
使用“空白新行”技巧,您可以通過執行以下操作在 Swift 5 中實現此目的:
let datePicker = UIDatePicker()
datePicker.frame = CGRect(x: 0, y: 40, width: 270, height: 200)
let alert = UIAlertController(title: "TITLE", message: "\n\n\n\n\n\n\n\n\n", preferredStyle: .alert)
alert.view.addSubview(datePicker)
let selectAction = UIAlertAction(title: "OK", style: .default, handler: { _ in
print("Selected Date: \(datePicker.date)")
})
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
alert.addAction(selectAction)
alert.addAction(cancelAction)
present(alert, animated: true)
它看起來不錯,但請記住它很笨拙,將來可能會損壞
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.