2016-10-18 11 views
0

Okay, ich habe eine Menge Dokumentation über die Funktionsweise des UIAlertController nachgeschlagen und ich habe ein ziemlich einzigartiges Szenario. Meine Anwendung wurde entwickelt, um mit einem HID Bluetooth-Scanner zu arbeiten. Wenn ich Folgendes verwende:Swift UIAlertController deaktivieren Return-Taste ohne UITextField

preferredStyle: UIAlertControllerStyle.Alert 

Nachdem ich eine Warnung generiert habe, dass der Artikel, den ich gescannt habe, falsch ist. Cool, Alert tritt auf, Problem ist, wenn ich erneut scanne (was Tastatureingaben emuliert), der Return-Schlüssel wird an den Alarm gesendet und der Alarm führt die Abweisung aus.

Wenn ich benutze:

preferredStyle: UIAlertControllerStyle.ActionSheet 

Dann wird der Alarm zu bleiben, wo sollte es Scans und ignorieren, während das Alarmfenster gerade liegt, wie ich es will.

Also meine Frage ist, wie kann ich den Return-Schlüssel erfassen und verhindern, dass der Alarm die Kündigung Aktion aufrufen? Ich bin ein bisschen neu mit swift und ich habe das Gefühl, die Antwort ist einfach, aber ich habe ein halbes Dutzend Dinge ausprobiert, die einfach nicht funktionieren.

Wenn es eine Einstellung gibt, um alle Benutzereingaben in das Warnfenster oder irgendeine Lösung zu verhindern, bin ich für jede Methode. Ich benutze das ActionSheet lieber nicht und verwende lieber die iOS-Warnungen, anstatt einen eigenen Bildschirm zu erstellen. Wenn das nicht möglich ist, kann ich mir sicher ein eigenes 'Alerts' Fenster erstellen.

Code, den ich von einer einfachen Alerts-Klasse anrufe, die ich gemacht habe.

import UIKit 

class Alerts { 

var controller: UIViewController 
var message: String 
var title: String 

init?(title: String, message: String, controller: UIViewController){ 
    if title.isEmpty || message.isEmpty { 
     return nil 
    } 

    self.title = title 
    self.message = message 
    self.controller = controller 
} 

func save_alert(input_field:UITextField, callable: (Bool)->Void){ 
    let action = UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Default) { 
     UIAlertAction in 
     callable(false) 
     input_field.enabled = true 
     input_field.becomeFirstResponder() 
     print("DISMISS CALLED") 
    } 
    let alert = UIAlertController(title: self.title,message:self.message,preferredStyle: UIAlertControllerStyle.Alert) 

    alert.addAction(action) 

    self.controller.presentViewController(alert,animated:true, completion: nil) 
} 
} 

Antwort

0

Versuchen Sie etwas wie das.

func save_alert(input_field:UITextField, callable: (Bool)->Void){ 
    let action = UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Default) { 
     UIAlertAction in 
     callable(false) 
     input_field.enabled = true 
     input_field.becomeFirstResponder() 
     print("DISMISS CALLED") 
     showAlert() 
    } 
    showAlert() 
} 

func showAlert() { 
     let alert = UIAlertController(title: self.title,message:self.message,preferredStyle: UIAlertControllerStyle.Alert) 

     alert.addAction(action) 

     self.controller.presentViewController(alert,animated:true, completion: nil) 
    } 
Verwandte Themen