2015-09-26 15 views
5

iOS開発のための迅速な学習のために、リストタイプのアプリケーションを作成しています。右側のナビゲーションバーに設定ボタンがあり、ユーザーがテーブルビューの上にあるボタンをクリックするたびに、新しいアイテムをリストに追加することができました。これにより、バーの左側に「キャンセル」ボタンが表示され、右側に「追加」ボタンが表示されます。しかし、人が完了すると、それらのボタンは消えるので、セグを呼び出すはずの関数を呼び出して、設定ボタンをプログラムで再作成します。セレクタが私の素早いUIBarButtonItemで動作しない

self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "modify"), style: UIBarButtonItemStyle.Plain, target: nil, action: Selector("showSettings:")) 

これは、(私は印刷を追加したナビゲーションバー上のボタンを作成するコードである(そして、それが実際に作成されます)

func showSettings(sender: AnyObject?) { 
    print("segueShouldBeDone!") 
    performSegueWithIdentifier("showSettings", sender: sender) 
} 

そして、これはセグエを呼ぶことになっている機能ですそれが少なくとも呼び出されたかどうかを確認してください)。

私はコード内の別の場所でこの同じ問題を抱えていましたが、私はそれを修正することをあきらめていました。しかし、今はアプリの仕組みに干渉しているので、私はそれを修正する方法を知りたがっていました。

助けがあれば助かります。あなたがバーボタン項目の目標のためにnilの代わりselfを指定したため

+0

@LeoDabusあなたが正しいと私はそれをしていたはずですが、実際には何も変えていません。画像は既に表示されていました。 – AugustoQ

答えて

10

あなたshowSettings:セレクタが呼び出されていません。

self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "modify"), style: UIBarButtonItemStyle.Plain, target: self, action: Selector("showSettings:")) 

このshowSettings:メソッドのコード行が含まれている同じクラスであると仮定します。行を次のように変更します。

この初期化子のドキュメント、具体的にはtargetパラメータに関する情報をお読みください。

+0

うん、それはそれを解決しました。しかし、私の 'showSettings'関数がパラメータを取らなかったとしても(セレクタとして" showSettings "を使用した)、それは動作しませんでした。 segueの送信者は 'nil'と異なる必要がありますか?私がそれを使用していた場所(質問の中で言及されているように)では、何もパラメータを取らず、関数も呼び出されていませんでした。これは私が 'target:nil'で「Add」と「Cancel」ボタンを作成するのに使ったので混乱し、うまく動作します。 – AugustoQ

+0

'nil'の代わりに' self'を 'UIBarButtonItem'初期化子に渡すことは、あなたの' showSettings: 'メソッドに渡される' sender'パラメータと全く関係なく、segueと全く関係がありません。 – rmaddy

+0

他のUIBarButtonItemsはなぜ 'nil'をターゲットにしていて、他の2つはそうでなかったのですか?何か案は? – AugustoQ

関連する問題