3

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

在此处输入图像描述

。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>>
4

3 回答 3

3

//使用这个方法

-(BOOL)textViewShouldBeginEditing:(UITextView *)textView{

    textView.inputAccessoryView = yourToolBar;

    return YES;
}
于 2012-04-12T16:51:06.710 回答
3

尝试在方法中设置这些viewDidLoad

于 2012-04-12T18:42:15.917 回答
0

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

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

于 2012-04-12T01:24:28.270 回答