2017-03-07 1 views
0

ich zur Zeit eine Arbeits UIToolbar habe, wo ich zusätzliche Tasten oberhalb der Tastatur setzen werde, wenn ein UITextField verwenden, aber ich will für über ein UITextView einen zweiten UIToolbar Typen machen. Als ich versuchte, meinen Code zu kopieren und ihn so zu modifizieren, dass er mir gefällt, wird er nicht angezeigt. Ich bin mir nicht sicher, ob ich etwas falsch mache oder ob es etwas mit den verwendeten NotificationCenter und addObserver zu tun hat. Zu Ihrer Information, die gesamte Klasse heißt AddRecipeDirectionVC: UIViewController, UITextViewDelegate, wenn das überhaupt benötigt wird.eine zweite UIToolbar für Tastatur mit UITextViews verwendet Hinzufügen

So, hier ist der Beobachter Code Ich füge in meine viewDidLoad

override func viewDidLoad() { 
    super.viewDidLoad() 

    //...Other Code... 

    NotificationCenter.default.addObserver(self, selector: #selector(AddRecipeDirectionVC.keyboardWillShow(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil) 
} 

Ursprünglich dachte ich, ich auf jeden UIViewController diesen Observer hinzufügen hatte, aber ich beginne diesen Code zu denken, ich bin Verwendung könnte nur in der ursprünglichen VC und es würde für den Rest des Projekts durchgeführt werden (derzeit verwende ich diesen Code in jeder VC, wo ich die Toolbar hinzufügen)

Als nächstes habe ich die textViewDidBeginEditing Funktion, wo ich denke, dass die Tastatur-Symbolleiste hinzugefügt wird.

func textViewDidBeginEditing(_ textView: UITextView) { 

    if (textView.textColor == UIColor.lightGray) { 
     textView.text = nil 
     textView.textColor = UIColor.black 
    } 
    self.keyboardToolbar(textView: textView) //Adding Keyboard 
} 

Und dann endlich, ich habe keyboardWillShow und keyboardToolbar Funktionen

func keyboardWillShow(notification: Notification) { 

    let keyFrame = ((notification as NSNotification).userInfo![UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue 
    let keyHeight = keyFrame.size.height 

    self.bottomSpace.constant = keyHeight + 12 
} 

func keyboardToolbar(textView: UITextView) { 

    let toolbar: UIToolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 1, height: 1)) 
    toolbar.barStyle = UIBarStyle.default 
    toolbar.bounds.size.height = 28 

    let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil) 

    let done: UIBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "Done Check"), style: UIBarButtonItemStyle.done, target: self, action: #selector(AddRecipeIngredientVC.doneButtonAction)) 
    done.tintColor = UIColor.aqua(alpha: 1.0) 

    let clear: UIBarButtonItem = UIBarButtonItem(title: "Clear", style: UIBarButtonItemStyle.plain, target: self, action: #selector(AddRecipeDirectionVC.clearButtonAction)) 
    clear.tintColor = UIColor.darkAqua(alpha: 1) 

    var items = [UIBarButtonItem]() 

    items.append(clear) 
    items.append(flexSpace) 
    items.append(done) 

    toolbar.items = items 
    toolbar.sizeToFit() 

    textView.inputAccessoryView = toolbar } 

func doneButtonAction() { 

    self.directionText.resignFirstResponder() 
    self.bottomSpace.constant = 12 
} 

func clearButtonAction() { 

    directionText.text = "" 
} 

Soweit ich sagen kann, ich bin das alles tun gleiche wie in den anderen VCs, so scheint es, wie es sein sollte arbeiten, aber nichts taucht auf. Lassen Sie mich wissen, ob zusätzlicher Code hinzugefügt werden muss.

Sie in fortgeschrittenen Vielen Dank für jede mir jemand helfen :)

Antwort

0

Nach viel googeln geben kann, fand ich heraus, dass der keyboardToolbar Code in textViewShouldBeginEditing nicht textViewDidBeginEditing gesetzt werden musste. Von dem, was ich verstehe, mit einem UITextView wurde das Layout bereits festgelegt, sobald es textViewDidBeginEditing erreicht, daher der Grund, warum ich es nicht sah. Dies ist der Code, den ich am Ende benutzt habe, der den Job gemacht hat. Alles andere ist neben dem, was unten gezeigt wird, dasselbe.

func textViewShouldBeginEditing(_ textView: UITextView) -> Bool { 

    self.keyboardToolbar(textView: textView) 
    return true 
} 

func textViewDidBeginEditing(_ textView: UITextView) { 

    if (textView.textColor == UIColor.lightGray) { 
     textView.text = nil 
     textView.textColor = UIColor.black 
    } 
} 
0

versuchen diesen Code

func keyboardToolbar(textView: UITextView) { 

    let toolbar: UIToolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 1, height: 1)) 
    toolbar.barStyle = UIBarStyle.default 
    toolbar.bounds.size.height = 28 

    let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil) 


    let done: UIBarButtonItem = UIBarButtonItem(title: "done", style: UIBarButtonItemStyle.done, target: self, action: #selector(self.doneButtonActionn)) 
    done.tintColor = UIColor.red 

    let clear: UIBarButtonItem = UIBarButtonItem(title: "Clear", style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.doneButtonAction)) 
    clear.tintColor = UIColor.black 


    var items = [UIBarButtonItem]() 

    items.append(clear) 
    items.append(flexSpace) 

    items.append(done) 

    toolbar.items = items 
    toolbar.sizeToFit() 

    textView.inputAccessoryView = toolbar 


} 


func doneButtonAction() { 

    self.bodyTextView.resignFirstResponder() 
    //self.bottomSpace.constant = 12 
} 

func doneButtonActionn() { 

    self.bodyTextView.resignFirstResponder() 
    //self.bottomSpace.constant = 12 
} 

func textViewShouldBeginEditing(_ textView: UITextView) -> Bool { 

    self.keyboardToolbar(textView: textView) 
    return true 
} 
Verwandte Themen