工具栏不会显示在键盘上方

Posted

技术标签:

【中文标题】工具栏不会显示在键盘上方【英文标题】:Toolbar won't show above keyboard 【发布时间】:2012-04-12 00:38:00 【问题描述】:

我无法让工具栏显示在键盘上方(就像苹果的完成按钮一样)。有什么可以想到为什么它没有显示?如下图所示。

.h

@interface CustomerNotesController : UITableViewController <UITextViewDelegate>

    UIToolbar *noteToolbar;
    IBOutlet UITextView *note;
    id delegate;


@property (nonatomic, strong) IBOutlet UITextView *note;
@property (nonatomic, retain) id delegate;
@property (nonatomic, retain) UIToolbar *noteToolbar;

.m

@synthesize note, noteToolbar, delegate;

- (void)viewDidLoad

    [super viewDidLoad];

    [note setDelegate:self];
    [note becomeFirstResponder];


- (void)textViewDidBeginEditing:(UITextView *)textView

    NSLog(@"EDITING");
    if (noteToolbar == nil) 
        NSLog(@"Creating toolbar");

        noteToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0, 0.0, self.view.bounds.size.width, 44.0)];
        noteToolbar.barStyle = UIBarStyleBlackTranslucent;

        UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelNote:)];

        UIBarButtonItem *clearButton = [[UIBarButtonItem alloc] initWithTitle:@"Clear" style:UIBarButtonItemStyleBordered target:self action:@selector(clearNote:)];

        UIBarButtonItem *extraSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

        UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(saveNote:)];

        noteToolbar.items = [NSArray arrayWithObjects:cancelButton, clearButton, extraSpace, doneButton, nil];
        NSLog(@"Items: %@", noteToolbar.items);
    

    NSLog(@"Current field: %@",textView);
    NSLog(@"keyboard: %@", noteToolbar);
    textView.inputAccessoryView = noteToolbar;

日志

2012-04-11 17:31:00.148 MyApp[28892:fb03] EDITING
2012-04-11 17:31:00.148 MyApp[28892:fb03] Creating toolbar
2012-04-11 17:31:00.149 MyApp[28892:fb03] Items: (
    "<UIBarButtonItem: 0x10dc3420>",
    "<UIBarButtonItem: 0x10dc3480>",
    "<UIBarButtonItem: 0x10dc34e0>",
    "<UIBarButtonItem: 0x10dc3540>"
)
2012-04-11 17:31:00.149 MyApp[28892:fb03] Current field: <UITextView: 0x10d94f40; frame = (5 5; 310 140); text = 'This is sample text'; clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x10d95170>; contentOffset: 0, 0>
2012-04-11 17:31:00.150 MyApp[28892:fb03] keyboard: <UIToolbar: 0x10dc2820; frame = (0 0; 320 44); opaque = NO; layer = <CALayer: 0x10dc2730>>

【问题讨论】:

尝试在viewDidLoad方法中设置这些 @Legolas 我尝试了一些此代码的位置。我确实加载了视图,keyboardWillAppear,以及 textViewDidBeginEditing 和 textViewShouldBeginEditing。 @QwertyBob 你们不理解这个问题......可以这样做,因为我以前在其他应用程序中使用过它。工具栏位于键盘上方,就像 Apple 在其键盘上所做的那样。 @Computer 我真的看不出你的代码有什么问题。它看起来是正确的,并且 inputAccessoryView 应该会显示出来。 [note becomeFirstResponder]; 是怎么回事? @Legolas 我希望键盘在视图显示时显示并且光标已经在文本视图中,以便用户可以开始输入。我试过把它拿出来并手动选择文本视图,但仍然没有改变。 【参考方案1】:

尝试在viewDidLoad 方法中设置这些!

【讨论】:

澄清其他有此问题的人。当我将它放在视图中加载之前它对我不起作用的可能原因是我可能没有设置textview.delegate = self;。事实上它可能已经被注释掉了。【参考方案2】:

//使用这个方法

-(BOOL)textViewShouldBeginEditing:(UITextView *)textView

    textView.inputAccessoryView = yourToolBar;

    return YES;

【讨论】:

【参考方案3】:

你不能这样做。键盘是您无法直接控制的系统控制的 UIView。操作系统会将键盘视图置于所有其他视图之上,以确保它具有正确的焦点来收集用户输入。

您能否提供更多背景信息来说明您为什么要这样做?即使您确实找到了一种使视图按照您描述的方式运行的方法,它也几乎肯定会因为违反人机界面指南而被 Apple 拒绝。

【讨论】:

嗯?我不认为你理解这个问题。我试图让一个工具栏显示在键盘上方(而不是前面),并带有一个完成按钮和一些其他按钮。就像苹果在他们的键盘上一样。它可以像我以前看到的那样完成。 我认为你们应该使用我上面发布的方法。

以上是关于工具栏不会显示在键盘上方的主要内容,如果未能解决你的问题,请参考以下文章

在 ios 键盘上方显示建议工具栏

如何在 UIWebView 上的键盘上方显示工具栏 [关闭]

键盘出现时 UITextView 向上移动

在键盘上方添加 UITextField

iOS:键盘上方的工具栏

如何使用 React Native 制作默认键盘上方的工具栏?