gpt4 book ai didi

ios - 将 UIBarButtonItem 与图像或系统预设一起用于 SplitView/Popover 控件

转载 作者:行者123 更新时间:2023-11-28 18:40:21 25 4
gpt4 key购买 nike

我目前正在优化 iPad 的应用程序,并希望使用带有图像的 UIBarButtonItem 来呈现弹出窗口。如果我使用的是带标题的按钮,那么我目前使用的代码效果很好,但我更愿意使用我自己的图像或 UIBarButtonSystemItem 提供的图像之一。如果我根本不设置按钮的标题,它就不会显示。如果我设置标题和图像,我会在真实硬件上获得标题,但图像会显示在模拟器上。使用 UIBarButtonSystemItem,我得到了我想要的按钮,但它也出现在横向模式下(它不应该这样做,因为我正在为横向使用 Split View)。

使用 setImage、setTitle 的任意组合或将按钮初始化为系统预设均无效。当检测到横向旋转但它仍然在屏幕上时,我还尝试将带有系统预设的按钮设置为零。我不确定如何从这里开始,但我真的很想避免为此按钮使用字符串,而且我非常想知道为什么会这样。

代码如下:

#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;
}

这导致图像在我想要的时间/地点显示,但按钮没有边框(尽管我将其设置为)并且不显示弹出窗口。

最佳答案

编辑:我没有注意到这是 splitView 委托(delegate),而您正在从 iOS 接收 UIBarButtonItem。所以我建议您尝试以下操作。

创建您自己的按钮项,并从系统提供的目标和选择器中复制。像这样创建新的按钮项:

UIBarButtonItem *newBut = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleBordered target: barButtonItem.target action: barButtonItem.action];
[[self navigationItem] setLeftBarButtonItem:newBut];

关于ios - 将 UIBarButtonItem 与图像或系统预设一起用于 SplitView/Popover 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11803237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com