如何在UINavigationController的所有视图之前显示一个UIButton?

3
我有一个`UIButton`,希望它能像`UINavigationBar`一样,在我的`UINavigationController`的所有`viewControllers`前面显示在同一位置,但在这种情况下,我希望该按钮漂浮在屏幕的左下角,如下所示:
(图片)
我可以尝试手动将其添加到每个`viewController`中,但我更愿意只添加一次并忘记它。
将按钮作为子视图添加到`UIWindow`似乎不起作用 - 它会出现在`rootViewController`后面。
更新:我已经找到了一种方法来实现它,但因为它涉及iOS 7,直到解除保密协议之前,我不能在这里发布解决方案。好消息是,实现这个目标非常简单!一旦可以分享,我会发布相关信息。

创建一个 UIView 并将其添加到每个 VC 上。 - Vivek Sehrawat
没错,但这正是我在这里试图避免做的事情。我想让它浮动在所有视图控制器的前面,而不是在转换过程中移动。 - bryanjclark
@bryanjclark iOS 7的保密协议已经解除。你做了什么? - Tom Hamming
@TomHamming 我实现了自定义的UINavigationController转场,并在转场期间移动了视图控制器之间的按钮。 - bryanjclark
3个回答

0
创建一个 NSObject 类 buttonPanel 并分配按钮,您可以按以下方式调用按钮面板:
buttonPanel * buttonPanel = [[buttonPanel alloc] init];
buttonPanel.delegate = self;
[buttonPanel showButtonWithNavigationController:self.navigationController inView:self.parentViewController.view];

ButtonPanel 类:

//ButtonPanel.h
#import <Foundation/Foundation.h>

@class ButtonPanel;

@protocol ButtonPanelDelegate <NSObject>

-(void) ButtonPanel:(ButtonPanel*) buttonPanel ;

@end

@interface ChatMessagePanel : NSObject<UIActionSheetDelegate> {

    UINavigationController *navigationController;

    id<ButtonPanelDelegate> delegate;
}

@property(nonatomic,retain) UINavigationController *navigationController;
@property (nonatomic,retain) id<ButtonPanelDelegate> delegate;

-(void)showButtonWithNavigationController:(UINavigationController*) navigationController inView:(UIView*) view;

@end


//  ButtonPanel.m


#import "ChatMessagePanel.h"

@implementation ButtonPanel

@synthesize userListModal,delegate,navigationController;

-(void)showMessageWithNavigationController:(UINavigationController*) _navigationController inView:(UIView*) view
{
    self.navigationController = _navigationController;

    baseViewWidth = view.frame.size.width;
    baseViewHeight = view.frame.size.height;

    incomingRequestActionSheet = [[UIActionSheet alloc] initWithTitle:@"" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil, nil];
    [incomingRequestActionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];
    [incomingRequestActionSheet showInView:view];


    UIButton *blockUserBttn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 80, 40)];
    [blockUserBttn setTitle:NSLocalizedString(@"BLOCK_USERS",@"") forState:UIControlStateNormal];
    [blockUserBttn setBackgroundColor:[UIColor clearColor]];
    [blockUserBttn addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];


    UIBarButtonItem *blockUserBarBttn = [[UIBarButtonItem alloc] initWithCustomView:blockUserBttn];

    [optionToolBar setItems:[NSArray arrayWithObjects:blockUserBarBttn, nil]];
    [incomingRequestActionSheet addSubview:optionToolBar];

}

-(void)buttonAction:(id) sender
{

}

@end

-1
我认为在iOS中这是不可能的。你必须为每个视图单独处理。

这对你有帮助吗? - user1673099
不好意思,没有。不过还是谢谢你的尝试! :) - bryanjclark
我已经想通了,但是因为它使用了iOS 7的一些东西,所以我现在无法发布它。一旦保密协议解除后,我会立即发布! - bryanjclark

-1

您可以简单地将UIButton添加到窗口中,如下所示:

 [self.window addSubview:Button];

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];之后


实际上,这不起作用 - 按钮最终会被放置在UIWindow的所有子视图后面,包括根视图控制器。 - bryanjclark
只有当键盘出现在前面时,它才会被推到后面...否则它将保持在前面...请检查... - IronManGill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接