Custom Keyboard ButtonTitle Verzögerung

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Custom Keyboard ButtonTitle Verzögerung

    Hallo,

    ich bin gerade dabei meine erste App (iOS 8 Custom Keyboard) zu entwickeln.

    Hierbei sind die einzelnen Tasten Buttons :) Ich möchte nun den Title der Buttons ändern je nachdem ob groß oder klein geschrieben wird.
    Auszug:


    Quellcode

    1. let text = buttonTitle!.uppercaseString;
    2. button.setTitle("\(text)", forState: .Normal);
    Analog für Kleinschreibung.
    Das ist auch nicht das Problem, das funktioniert eigentlich, aber halt mit einer kleinen Verzögerung.. Anscheinend eine Animation, oder?
    Ich hab außerdem eine Funktion geschrieben die nach einem Großbuchstaben automatisch klein weiterschreibt (es wird der Title des Buttons genommen als Text der geschrieben wird). Wenn ich nun aber schnell Tippe dann gibt es meist nicht nur einen Großbuchstaben sondern zwei, weil die Anzeige der ButtonTitles noch nicht umgeschalten ist.
    Ergo: Wie bekomme ich die Animation weg?

    BTW: Wie bekomme ich den Tastendrücksound her? :)

    lg
    Holger
  • Die Animationen auszuschalten ist kniffliger. Ich würde zunächst mal versuchen, die Änderung in einen Animationsblock mit Dauer 0 zu packen:

    Quellcode

    1. [UIView animateWithDuration:0.0 animations:^{
    2. ...
    3. }];
    Eine andere Möglichkeit geht über CoreAnimation:

    Quellcode

    1. [CATransaction begin];
    2. [CATransaction setValue:@YES forKey:kCATransactionDisableActions];
    3. ...
    4. [CATransaction commit];


    Da bin ich mir aber nicht sicher, ob das UIKit das nicht einfach ignoriert.
    „Meine Komplikation hatte eine Komplikation.“
  • Die Buttons die geändert werden sollen sind in einer View drin
    @IBOutlet weak var row1: UIView!

    Die Shift-Taste ist mit folgender Funktion verbunden (nur die relevante Funktionalität hier dargestellt:

    Quellcode

    1. var capLockOn = true;
    2. @IBAction func shiftPressed(button: UIButton){
    3. capsLockOn = !capsLockOn;
    4. changeCaps(row1);
    5. }
    Und diese Funktion ändert die Zeichen:

    Quellcode

    1. func changeCaps(containerView: UIView) {
    2. for view in containerView.subviews {
    3. if let button = view as? UIButton {
    4. let buttonTitle = button.titleLabel!.text
    5. if capsLockOn {
    6. let text = buttonTitle!.uppercaseString;
    7. button.setTitle("\(text)", forState: .Normal);
    8. } else {
    9. let text = buttonTitle!.lowercaseString;
    10. button.setTitle("\(text"), forState: .Normal);
    11. }
    12. }
    13. }
    14. }
    Alles anzeigen


    Das ist alles :)

    lg
    Holger
  • Thyraz schrieb:

    edit: Dachte ich zumindest. @macmoonshine woher kommt denn die Animation deiner Meinung nach?
    Die Animationen laufen auf der unteren Ebene schon über CoreAnimation. Allerdings hat Apple einige Teile im UIKit weggekapselt. Bespielswese verwenden Layer-Aktionen nicht die aktuelle Animationszeit aus der umgebenden Transaktion.
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    C-Quellcode

    1. publc <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyKeyboardView</span>: <span class="hljs-title">UIView</span>, <span class="hljs-title">UIInputViewAudioFeedback</span> {</span>
    2. <span class="hljs-keyword">var</span> enableInputClicksWhenVisible: Bool {
    3. <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>
    4. }
    5. [...]
    6. }
    Steht alles in der verlinkten Doku.
    Anscheinend ist das zu hoch für mich :(

    Ich hab eine App und dann die Keyboard Extension.
    In dieser hab ich einen KeyboardViewController.swift und hab dort aus
    class KeyboardViewController: UIInputViewController {

    class KeyboardViewController: UIInputViewController, UIInputViewAudioFeedback {
    gemacht.
    Die von dir (und der Doku) genannte Variable enableInputClicksWhenVisible eingefügt.

    Dann in
    @IBAction keyPressed(button: UIButton) {

    folgendes eingefügt:
    UIDevice.currentDevice().playInputClick();

    Ist der Aufruf richtig? Es kompiliert zwar, aber es kommt kein Klick.

    Danke für die Hilfe und Geduld mit einem iOS-Dev-Anfänger :)

    lg
    Holger