如何在iOS 7中的UISplitViewController的主视图弹出按钮中显示后退箭头?

时间:2013-11-12 21:41:26

标签: ios objective-c ipad uinavigationcontroller uisplitviewcontroller

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

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

我很容易设置按钮的标题,但结果只是一个纯文本按钮,没有后退箭头。我希望获得类似Mail应用程序的东西,其中主弹出按钮也有后V形。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

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

在iOS7中,私有子类为UINavigationItemView + _UINavigationBarBackIndicatorView。一个是按钮,另一个是雪佛龙。 _UINavigationBarBackIndicatorViewUIImageView的子类。所以它与你将要达到的目标非常接近。

答案 1 :(得分:1)

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

- (UIBarButtonItem *)displayModeButtonItem

如果您将返回的条形按钮项目设置为导航栏(UINavigationBar)的左侧按钮,它将为您显示V形符号。

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

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

答案 2 :(得分:0)

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

以下是黑客攻击,

<button type="button" class="btn btn-primary" data-dismiss="modal" data-ng-click="vm.Edit()" ng-disabled="Edit.$invalid" id="ticketEditbtn">Update Billing</button>

这是基于Ryan Henning的回答。

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

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