2014-12-31 3 views
0

Я пытаюсь сделать свою собственную клавиатуру, изучая Swift. На моей клавиатуре каждый ключ представляет собой отдельный UIView с UILabel в нем. Каждый UILabel имеет тег 1. Сначала я кодировал вход каждого ключа вручную, но я решил оптимизировать код и установить функцию, которая принимает текст UILabel и устанавливает его как входной сигнал, но по какой-то причине клавиатура сбой (нет журнала
Пользовательская сбой клавиатуры после попытки установить ввод текста в качестве названия метки в каждой клавише

Примечание 1: Один ключ показано упростить вещи
Примечание 2: Этот жест определяется в другом месте, он не хотел причиной аварии

Вот мой код:

override func viewDidLoad() { 
     super.viewDidLoad() 
var Qkey = UIView(frame: CGRectMake(3, 11, 26, 38)) 
     var Q = UILabel(frame: CGRectMake(5, 8, 17, 27)) 
     Q.tag = 1 
     Q.text = "Q" 
     Qkey.addSubview(Q) 
     tapRec1.addTarget(self, action: "keyPressed:") 
     Qkey.addGestureRecognizer(tapRec1) 
     self.view.addSubview(Qkey) 
} 

func keyPressed(sender: UIView){ 
    let theLabel : UILabel! = sender.viewWithTag(1) as UILabel; 
    var string = theLabel.text! 

    (textDocumentProxy as UIKeyInput).insertText("\(theLabel)") 
} 

Ошибки наблюдается в журнале:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITapGestureRecognizer viewWithTag:]: unrecognized selector sent to instance 0x798bba30' 

По сути то, что я пытаюсь сделать, это для UIView (отправитель), на котором функция вызывается, чтобы захватить все подвиды (UILabels) с тегом 1, и установите их текст как ввод на клавиатуре. Даже делая это на ключевых аварий :(Любая помощь очень ценится. Спасибо!

+0

, какая линия причиной аварии – Indrajeet

+0

@Indrajeet это одна функ keyPresse d1 (отправитель: UIView) { var theLabel: UILabel = sender.viewWithTag (1) как UILabel; (textDocumentProxy as UIKeyInput) .insertText (theLabel.text!) } – cyril

+1

Сделано переменным theLabel неявным. Это помогает вам – Indrajeet

ответ

0

Наконец понял. Вот рабочий код:

func keyPressed(sender: UITapGestureRecognizer){ 
    for subview in sender.view!.subviews as [UIView] { 

     if subview.tag == 1 
     { 
      let label = subview as UILabel 
      if capsLockOn { 
      (textDocumentProxy as UIKeyInput).insertText("\(label.text!.uppercaseString)") 
      } else { 
      (textDocumentProxy as UIKeyInput).insertText("\(label.text!.lowercaseString)") 
      } 

     } 
    } 
} 
0

Ваша функция не должна быть, как это

func keyPressed(sender: UIView) 
{ 
    let theLabel : UILabel! = sender.viewWithTag(1) as UILabel; 
    var string = theLabel.text! 

    (textDocumentProxy as UIKeyInput).insertText("\(theLabel)") 
} 

Это должно быть

func keyPressed(sender: UITapGestureRecognizer) 
{ 
    let theLabel : UILabel! = sender.viewWithTag(1) as UILabel 
    var string = theLabel.text! //No need of this line 

    println(theLabel.text) //To test value is coming or not 
    (textDocumentProxy as UIKeyInput).insertText(theLabel.text) 
} 
+0

Я только что закончил исправление своего кода, и это сработало :) Я попробую ваш метод и посмотрю, работает ли ti – cyril

+0

, можете ли вы сказать мне решение? – Indrajeet

+0

Да, конечно, но я просто нашел небольшую ошибку, если вы можете помочь. Любой способ связаться с вами напрямую? Я отправлю решение, как только он будет работать отлично – cyril