8

古いコードを更新し、ツールバーのスペースを増やすために、ボタンをテストから画像に変換しています。loadViewの新旧のコードの例は次のとおりです。

// New code, doesn't work.
UIButton *toggleKeyboardBtn = [UIButton buttonWithType:UIButtonTypeCustom];
toggleKeyboardBtn.bounds = CGRectMake( 0, 0, showKeyboardImage.size.width, showKeyboardImage.size.height );
[toggleKeyboardBtn setImage:showKeyboardImage forState:UIControlStateNormal];
UIBarButtonItem *toggleKeyboardItem = [[UIBarButtonItem alloc] initWithCustomView:toggleKeyboardBtn];
[toggleKeyboardItem setTarget:self];
[toggleKeyboardItem setAction:@selector(toggleKeyboard:)];

// Original code, works jut fine.
UIBarButtonItem *setupItem = [[[UIBarButtonItem alloc] initWithTitle:@"Setup" style:UIBarButtonItemStyleBordered target:[UIApplication sharedApplication].delegate action:@selector(showSetupView:)] autorelease];

私の新しいコードは、UIBarButtonItemのアクションを設定できませんからコピーされます。テキストボタンが正常に機能しているので、間違いを犯していないことは間違いありません。

showSetupView()は私のAppController.mファイルにあり、ボタンを押すとセットアップ画面が表示されたり消えたりします。

トグルキーボード()、OTOHは、loadView()ルーチンと同じファイルにあり、現在、次のコードで構成されています。

//- (void)toggleKeyboard {
- (IBAction)toggleKeyboard:(id)sender {
    NSLog(@"Entering toggleKeyboard()...");
    hiddenKeyboard = !hiddenKeyboard;
    [self prepareToolbarsAndStatusbar];
}

言うまでもなく、ボタンを押すアニメーションは表示されますが、NSLogメッセージは表示されません。そして最後の観察は、偶然に行われたものです。setActionセレクターを次のように変更します。

[toggleKeyboardItem setAction:@selector(noSuchRoutine:)];

きれいにコンパイルされ、おそらく私のルーチン名が何らかの理由で無視されていることを示しています。

誰かアイデアはありますか?ありがとう。

4

3 に答える 3

16

答えが見つかりました!ボタン アクションが iphone に応答しないでは、アクションとターゲットをUIButtonではなくに設定する必要があると言われていUIBarButtonItemます。それが Xcode の最新バージョンで新しいかどうかはわかりませんが、他の質問 (上記の質問など) が別の手法を使用しているためだと思います。これが私の新しいコードです:

UIButton *toggleKeyboardButton = [UIButton buttonWithType:UIButtonTypeCustom];
toggleKeyboardButton.bounds = CGRectMake( 0, 0, keyboardAddImage.size.width, keyboardAddImage.size.height );
[toggleKeyboardButton setImage:keyboardAddImage forState:UIControlStateNormal];
[toggleKeyboardButton addTarget:self action:@selector(toggleKeyboard) forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *toggleKeyboardItem = [[UIBarButtonItem alloc] initWithCustomView:toggleKeyboardButton];
//[toggleKeyboardItem setTarget:self];
//[toggleKeyboardItem setAction:@selector(toggleKeyboard:)];
于 2012-07-23T02:56:32.270 に答える
0

試しましたか

-(void)toggleKeyboard

[toggleKeyboardItem setAction:@selector(toggleKeyboard)];それなし:

そしてそれは何か違いがありましたか?メソッドはインターフェイスファイルで宣言されていますか?

于 2012-07-22T12:02:19.510 に答える