13

iPhone 用のポップアップを作成するFPPopoverクラスを使用しています。readme ファイルにある正確な手順に従いましたが、xib ファイルの UIbutton を使用する代わりに、プログラムで作成された UIBarButtonItem を使用しています。しかし、次のエラーが表示されます。

キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '-[UIBarButtonItem スーパービュー]: 認識されないセレクターがインスタンス 0x6a3e420 に送信されました'

readme ファイルと同じコードをコピーして貼り付けましたが、(UIButton*)okButton を (id)sender に変更しただけです (id は UIBarButtonItem* です)。

-(void)popover:(id)sender
{
    //the view controller you want to present as popover
    TestClass *controller = [[TestClass alloc] init];
    //our popover
    FPPopoverController *popover = [[FPPopoverController alloc] initWithViewController:controller];
    //the popover will be presented from the okButton view
    [popover presentPopoverFromView:sender];
    //release
    [controller release];
}

UIButtonではないUIBarButtonItemと関係があるのではないかと考えていましたか?それとも他のものですか?UIBarButtonItem を UIButton に変換しようとしましたが、それでも同じエラーが発生しました。それに対する解決策はありますか?

念のためもう 1 つ注意してください: これは、バー ボタンと共にナビゲーション バーをプログラムで作成した方法です。

UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(320, 0, 320, 44)];
UINavigationItem *navItem = [[UINavigationItem alloc] initWithTitle:@"By Clubs"];
[navBar pushNavigationItem:navItem animated:NO];
UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:@"Filter"
                                               style:UIBarButtonItemStyleBordered
                                              target:self
                                              action:@selector(popover:)];


navItem.rightBarButtonItem = editButton;
4

4 に答える 4

24

presentPopoverFromView は UIView サブクラスのみを受け入れます。UIBarButtonItem は UIView のサブクラスではないため、そのボタン項目に関連するビューを見つける必要があります。これは私が FPPopoverController で使用しているソリューションです

    UIBarButtonItem *buttonItem = sender;
    UIView* btnView = [buttonItem valueForKey:@"view"];
    //On these cases is better to specify the arrow direction
    [popover setArrowDirection:FPPopoverArrowDirectionUp];
    [popover presentPopoverFromView:btnView];

これはうまくいくはずです!お知らせ下さい!

于 2012-08-23T11:27:48.577 に答える
2

それは b/c UIBarButtonItemUIBarItemがandから継承したものNSObjectです。を継承する UI 要素のみがプロパティをUIView持ちsuperviewます。

于 2012-08-18T10:21:40.683 に答える
1

同じエラーが発生していました。解決策は、プログラムで UIButton を作成し (UIBar ボタン項目と同じ場所に - 適切な座標を設定)、UIButton からポップオーバーを表示することです。次に、UIButton を非表示にします。

このコードは私のために働いた:

-(void)testMethod {

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

// set action as NULL if you dont need any method/functionality to call

[button addTarget:self action:@selector(aMethod)
 forControlEvents:UIControlEventTouchDown];


[button setTitle:@"Show View" forState:UIControlStateNormal];
button.frame = CGRectMake(130, -40, 160.0, 40.0);
[self.view addSubview:button];

AlertsViewController *controller = [[AlertsViewController alloc] init]; 

//our popover
FPPopoverController *popover = [[FPPopoverController alloc] initWithViewController:controller]; 

//the popover will be presented from the Button view 
[popover presentPopoverFromView:button]; 

//hide the button
button.hidden = YES;

}

-(void)aMethod {
// Write any functionality if you need
}

お役に立てれば。問題が発生した場合はお知らせください。

于 2012-08-22T06:18:23.147 に答える
0

Mostly applications display popover from BarButtonItem. FPPopOverController doesn't support this. So, in my opinion you should use: WYPopOverController

于 2014-10-31T11:39:55.620 に答える