2016-08-26 14 views
-2

私はiOS devをスウィフト3で新しくしました 私はUITextFieldで計算結果を表示したいので、+ -/* bottomを表示したいと思います。パッドが私はエラーなしでUITextFieldと対話することはできません。 私はいくつかの時間を過ぎて読んでいました。私が意味が何であるかを知らないが、私はセグメンテーションフォールトのような仮定NSExceptionたNdocのおかげで、今私はタイプのキャッチされない例外のエラーを見つける{UITextField(Swift)とのやりとり方法

let keypadToolbar: UIToolbar = UIToolbar() 

    // add a done button to the numberpad 
    keypadToolbar.items=[ 
     UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: textField, action: #selector(UITextField.resignFirstResponder)), 
     UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: self, action: nil), 

     UIBarButtonItem(title: "+", style: UIBarButtonItemStyle.done, target: self, action: #selector(self.addSum(_:))), 
     UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: self, action: nil), 
     UIBarButtonItem(title: "-", style: UIBarButtonItemStyle.done, target: textField, action: #selector(UITextField.resignFirstResponder)), 
     UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: self, action: nil), 
     UIBarButtonItem(title: "/", style: UIBarButtonItemStyle.done, target: textField, action: #selector(UITextField.resignFirstResponder)), 
     UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: self, action: nil), 
     UIBarButtonItem(title: "=", style: UIBarButtonItemStyle.done, target: textField, action: #selector(UITextField.resignFirstResponder)) 
    ] 
    keypadToolbar.sizeToFit() 
    // add a toolbar with a done button above the number pad 
    textField.inputAccessoryView = keypadToolbar 
} 



@IBAction func addSum(_ sender: UITextField) 
{ 

    sender.insertText("+") 

} 

私は自分のコードを変更:(UITextFieldのテキストフィールド)addDoneButtonOnNumpad FUNC

多分。

さらに私は、IBActionと私がやりとりしたいUIextfieldをリンクしました。 実際には、UITextFieldの数値に+または - または/または*を追加し、別の数値で数値計算を行い、 の結果を同じUITextFieldに表示したいとします。

よろしく

http://i.stack.imgur.com/dIscv.png

+0

あなたのコードのTEXTバージョンを含めるように質問を編集し、エラーが発生している行を指定してください。リンクのみの質問は、リンクの有効期限が切れると役に立たなくなるため、悪いです。 –

答えて

0

まず、selectorの構文を次のように変更します。

UIBarButtonItem(title: "+", style: UIBarButtonItemStyle.done, target: self, action: #selector(self.sayHello(_:))) 

は今swift 3.0に、あなたは最初のパラメータの名前を渡すので、このようなあなたのsayHelloアクションを変更する必要があります。

func sayHello(_ sender: UIBarButtonItem) { 
    theTextField.text = "Hello!" 
} 

メソッドのパラメータの型がAnyObject又はUIBarButtonItemのいずれかである、上記の答えでないようNSButton

+0

コードスニペットありがとうございます。私はそれとその作業を試みた。 –

+0

あなたの応答は、セレクタのシンタックスとボタンとのやりとりを理解するのに役立ちましたが、まだ固まっています。 –

+0

次に、あなたの新しい問題をSOに追加する必要があります。 –

1

あなたがボタンに接続したいのObjective-Cメソッドを持っているなら、あなたはあなたが使用しているアクションのための文字列形式を使用すると思います。 (Swift 3ではセレクタを定義する文字列スタイルが廃止されていると考えられますが、常に#selectorを使用するという習慣が必要です)。

Swift IBActionメソッドの場合は、あなたはUITextFieldののカスタムサブクラスを作成していない限り、あなたはUITextFieldへのsayHelloのようなメッセージを送信できないことを

#selector(sayHello(_:)) 

ノートのように、スウィフト関数定義を取り#selector、。

通常、ビューコントローラをアクションのターゲットにして、アクションを処理するメソッドをビューコントローラに実装し、メッセージをテキストフィールドにインストールするような処理を行います。

UIBarButtonItem(title: "Done", 
    style: .done, 
    target: self 
    action: #selector(sayHello(_:)) 

そして、あなたはこのようなあなたのビューコントローラでsayHelloメソッドを定義できます:

あなたのコードは次のようになります

@IBAction func sayHello(sender: NSButton) { 
    theTextField.text = "Hello!" 
} 

P.S.スクリーンショットのコードを投稿しないでください。質問にコードを貼り付けて選択し、コードツールを使用してソースコードとしてフォーマットします。このエラーを表示するには、スクリーンショットALSOを含めることができますが、常にコードを書式付きテキストとして質問に入れてください。

+0

あなたの高速応答をありがとう、私は私のコードで変更しようとしましたが、とにかくセレクタ構文で働いていない私は何かを忘れてしまったので、新しいです。私はUITextFieldのサブクラスを作成していませんでした。私の最終目的は、例えば5 + 7のようなUIテキストフィールドで計算を行うことですが、私のツールバーは数字パッドの拡張であるためストーリーボードにボタンを作成できません。 –

+0

あなたが新しいなら、あなたは減速する必要があります。質問を編集して新しいコードを下に表示し、エラーを表示してください。 –

+0

あなたがちょうど言ったことのいくつかは私に意味をなさない。あなたは "UITextFieldでの計算[s]"をしません。テキストフィールドに計算結果を表示します。私はまた、あなたが「...私のツールバーは数字パッドの延長線である」という意味を理解していません。 –

関連する問題