0

現在、iPad用にアプリを最適化しており、画像付きのUIBarButtonItemを使用してポップオーバーを表示したいと考えています。私が現在持っているコードは、タイトル付きのボタンを使用している場合はうまく機能しますが、自分の画像またはUIBarButtonSystemItemで提供されている画像のいずれかを使用したいと思います。ボタンのタイトルをまったく設定しないと、単に表示されません。タイトルと画像を設定すると、実際のハードウェアでタイトルを取得しますが、画像はシミュレーターに表示されます。UIBarButtonSystemItemを使用すると、必要なボタンが表示されますが、横向きモードでも表示されます(横向きに分割ビューを使用しているため、表示されません)。

setImage、setTitleの任意の組み合わせを使用するか、システムプリセットとしてボタンを初期化しても機能しませんでした。また、横向きへの回転が検出されたときにシステムプリセットのボタンをnilに設定しようとしましたが、画面に表示されたままでした。ここから先に進む方法がわかりませんが、このボタンに文字列を使用することは避けたいと思います。さらに、なぜこれが発生するのか非常に興味があります。

コードは次のとおりです。

#pragma mark Split view handling
-(void)splitViewController:(UISplitViewController *)svc 
    willHideViewController:(UIViewController *)aViewController 
         withBarButtonItem:(UIBarButtonItem *)barButtonItem 
      forPopoverController:(UIPopoverController *)pc
{
    //If this bar button item doesn't have a title, it won't appear at all.
    [barButtonItem setTitle:@"-"];
    //barButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemOrganize target:[barButtonItem target] action:[barButtonItem action]];
    [barButtonItem setImage:[UIImage imageNamed:@"listing.png"]];

    //Take this bar button item and put it on the left side of our nav item
    [[self navigationItem] setLeftBarButtonItem:barButtonItem];
    self.popoverController = pc;
}

-(void)splitViewController:(UISplitViewController *)svc 
    willShowViewController:(UIViewController *)aViewController 
 invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
    //Remove the bar button item from our navigation item.
    //We'll double check that it's the correct button, even though we know it is.
    if(barButtonItem == [[self navigationItem] leftBarButtonItem]){
        [[self navigationItem] setLeftBarButtonItem:nil];
    }
    self.popoverController = nil;
}

アップデート:

これをviewDidLoadに追加しました:

customButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"listing.PNG"]]];
customButtonItem.style = UIBarButtonItemStyleBordered;

そして、willHideViewControllerを次のように更新しました。

-(void)splitViewController:(UISplitViewController *)svc 
    willHideViewController:(UIViewController *)aViewController 
         withBarButtonItem:(UIBarButtonItem *)barButtonItem 
      forPopoverController:(UIPopoverController *)pc
{
    //If this bar button item doesn't have a title, it won't appear at all
    customButtonItem.target = barButtonItem.target;
    customButtonItem.action = barButtonItem.action;
    barButtonItem = customButtonItem;
    [barButtonItem setTitle:@""];

    //barButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemOrganize target:[barButtonItem target] action:[barButtonItem action]];
    //[barButtonItem setImage:[UIImage imageNamed:@"listing.png"]];

    //Take this bar button item and put it on the left side of our nav item
    [[self navigationItem] setLeftBarButtonItem:barButtonItem];
    self.popoverController = pc;
}

これにより、画像は必要なときに/どこにでも表示されますが、ボタンには境界線がなく(設定しているにもかかわらず)、ポップオーバーは表示されません。

4

1 に答える 1

5

編集:これがsplitViewデリゲートであり、iOSからUIBarButtonItemを受け取っていたのを見逃しました。だから私があなたに提案するのは、次のことを試してみることです。

独自のbuttonItemを作成し、システムによって提供されるものからターゲットとセレクターをコピーします。次のような新しいボタンアイテムを作成します。

UIBarButtonItem *newBut = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleBordered target: barButtonItem.target action: barButtonItem.action];
[[self navigationItem] setLeftBarButtonItem:newBut];
于 2012-08-03T23:33:43.900 に答える