如何使工具栏面朝上键盘

时间:2015-05-12 21:28:51

标签: objective-c

我有一个工具栏并制作了这段代码,以便在我打开它时学习如何将它放在键盘上方,但是这样做或键盘出现后。

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UITextView *textField;
@property (weak, nonatomic) IBOutlet UIToolbar *toolbar;


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.textField.delegate = self;
    self.toolbar.delegate = self;
    self.textField.inputAccessoryView = self.toolbar;

    self.textField.inputView = self.toolbar;
    [self.toolbar removeFromSuperview];
    [self.textField becomeFirstResponder];

}

- (void)textViewDidBeginEditing:(UITextView *)textView
{


    self.textField.inputAccessoryView = self.toolbar;
}

2 个答案:

答案 0 :(得分:1)

您的专栏[self.toolbar removeFromSuperview];导致工具栏变为nil,因此无法显示。

正如@jammycoder所说,你只需要设置文本字段的inputAccessoryView。他建议并删除行self.textField.inputView = self.toolbar;

修改

我已经设置了一个简单的项目,并在故事板中的视图控制器上放置了UIToolbarUITextView。这两个视图连接(IBOutlets)到ViewController,就像可能那样。

如果我使用你的代码它确实没有显示键盘,为什么?因为您要分配inputView的{​​{1}}。

让我们调试您的代码。首先添加一堆UITextView这样的语句。

NSLog

这将打印如下内容:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.textField.delegate = self;

    NSLog(@"1 %@", NSStringFromCGRect(self.toolbar.frame));
    self.textField.inputAccessoryView = self.toolbar;

    NSLog(@"2 %@", NSStringFromCGRect(self.toolbar.frame));
    self.textField.inputView = self.toolbar;

    NSLog(@"3 %@", NSStringFromCGRect(self.toolbar.frame));
    [self.toolbar removeFromSuperview];

    NSLog(@"4 %@", NSStringFromCGRect(self.toolbar.frame));
    [self.textField becomeFirstResponder];
}

- (void)textViewDidBeginEditing:(UITextView *)textView
{
    NSLog(@"5 %@", NSStringFromCGRect(self.toolbar.frame));
    self.textField.inputAccessoryView = self.toolbar;

    NSLog(@"6 %@", NSStringFromCGRect(self.toolbar.frame));
}

所以,我们发现,不知何故,你的酒吧高度变为0.而且,老实说我不知道​​为什么,但让我们继续我们的调试。

正如@jammycoder指出的那样,需要2015-05-14 00:13:46.313 ToolbarKeyboard[8367:4583306] 1 {{0, 524}, {320, 44}} 2015-05-14 00:13:46.314 ToolbarKeyboard[8367:4583306] 2 {{0, 524}, {320, 44}} 2015-05-14 00:13:46.314 ToolbarKeyboard[8367:4583306] 3 {{0, 524}, {320, 44}} 2015-05-14 00:13:46.315 ToolbarKeyboard[8367:4583306] 4 {{0, 524}, {320, 44}} 2015-05-14 00:13:46.491 ToolbarKeyboard[8367:4583306] 5 {{0, 0}, {320, 0}} 2015-05-14 00:13:46.491 ToolbarKeyboard[8367:4583306] 6 {{0, 0}, {320, 0}} 的{​​{1}},如果你想要一个自定义键盘,你只需要这样做。所以让我们改变我们的代码:

inputView

这将打印出工具栏的高度保持不变。工具栏显示在键盘上方。

直到这里我使用真实设备进行调试,决定使用模拟器。等等,那里没有打开键盘!它似乎是Xcode 6的一个新的功能,所以我做了一个快速搜索并找到了这个stackoverflow:Xcode 6: Keyboard does not show up in simulator在最投票的答案中说了什么,一切都运行得很好

所以,简而言之。以下最小代码将产生所需的行为。如果您使用模拟器进行测试/调试,请确保执行此处所述的操作:https://stackoverflow.com/a/24497773/3927536

UITextView

答案 1 :(得分:0)

此行显示键盘

    [self.textField becomeFirstResponder];

当文本字段成为第一响应者时,它会自动调出键盘。

修改:删除以下行

self.textField.inputView = self.toolbar;

您只需将工具栏设置为inputAccessoryView

Edit2 :同时删除此行

[self.toolbar removeFromSuperview];