0

在我的详细 VC 中,我正在实现这个 UISplitViewController 委托方法:

- (void)splitViewController:(UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController:(UIPopoverController*)pc

然后我很容易设置按钮的标题,但结果只是一个带有纯文本的按钮,没有后退箭头。我正在寻找类似邮件应用程序的东西,其中主弹出按钮也有后 V 形。

我怎样才能做到这一点?

4

3 回答 3

2

创建您的自定义条形按钮项,使用 V 形图像,根据需要进行设置,并将条形按钮项的目标和操作设置为委托回调传递的目标和操作。这样,您的条形按钮将执行与系统传递给您的操作相同的操作。您必须使用图像创建自己的条形按钮,因为 AppStore 批准的 API 无法创建返回条形按钮。

在 iOS7 中,私有子类是UINavigationItemView+ _UINavigationBarBackIndicatorView。一个是按钮,另一个是人字形。_UINavigationBarBackIndicatorView是 的子类UIImageView。所以它非常接近你将实现的目标。

于 2013-11-14T22:14:45.297 回答
1

在 iOS 8 中,UISplitViewController 有一个方法:

- (UIBarButtonItem *)displayModeButtonItem

如果您将返回的栏按钮项设置为导航栏(UINavigationBar)的左按钮,它将为您显示人字形。

另一方面,如果将返回的条形按钮项放入工具栏(UIToolbar)中,则不会显示人字形。

对于我想要显示 V 形后退按钮的地方,但还需要显示几个我自己的栏按钮项目(如 iPad 上的邮件应用程序),我必须使用 UINavigationBar 和 UIToolbar。这是一个丑陋的解决方案,但我必须将 UINavigationBar 部分覆盖在 UIToolbar 的顶部,以便获得一个后退按钮 V 形以及我自己的几个条形按钮项。

于 2014-10-29T16:01:05.590 回答
0

如 Leo 所说,要访问 Apple 使用的默认后退按钮图像,箭头是 _UINavigationBarBackIndicatorView 类型的类。将此图像设置为后退栏按钮,您就可以开始了。

以下是黑客攻击,

        UIImage *imgViewBack ;

        for (UIView *view in self.navigationController.navigationBar.subviews) {
            // The arrow is a class of type _UINavigationBarBackIndicatorView. This is not any of the private methods, so I think
            // this is fine for the AppStore...
            if ([NSStringFromClass([view class]) isEqualToString:@"_UINavigationBarBackIndicatorView"]) {
                // Set the image from the Default BackBtn Imageview
                UIImageView *imgView = (UIImageView *) view;
                if(imgView){
                    imgViewBack = imgView.image ;
                }
            }
        }

这是基于 Ryan Henning 的回答。

可以从详细视图控制器显示代表主视图的后退按钮。UISplitview 控制器没有为此提供本机方法,但它返回一个条形按钮对象,我们可以直接将其指定为导航控制器条形按钮。很明显,细节视图控制器应该在导航控制器内才能工作。

   self.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem;
于 2017-03-14T12:58:17.807 回答