iOS - UIToolBar作为UITextView的inputAccessoryView

时间:2012-02-07 09:49:45

标签: ios keyboard uitextview

我为UIToolBar添加了UIBarButtonItem UITextView作为inputAccessoryView。它工作正常,但UIBarButtonItem可以在它的框架外触摸,也许在右边外面50像素。这没什么大不了的,但它让我很烦。谁知道为什么?

这是我的代码(ARC):

UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height, 320, 44)];
toolBar.barStyle = UIBarStyleBlack;
toolBar.translucent = YES;

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneWriting:)];
[toolBar setItems:[NSArray arrayWithObjects:doneButton, nil]];

self.messageTextView.inputAccessoryView = toolBar;

3 个答案:

答案 0 :(得分:7)

在iOS 6中,它似乎表现得如预期。 不错的提示:如果您希望按钮显示在右侧而不是左侧,请使用以下方法之一:

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

然后用:

初始化工具栏
[toolBar setItems:[NSArray arrayWithObjects:flexibleSpace, doneButton, nil]];

答案 1 :(得分:2)

如果工具栏中没有其他附近的按钮,工具栏似乎会将按钮的活动区域扩展到其边界之外。 Apple工程师必须认为最好是猜测用户打算按哪个而不是根本不做出反应。

答案 2 :(得分:2)

我希望它可以帮助你...

UIToolbar* keyboardDoneButtonView = [[UIToolbar alloc] init];
[keyboardDoneButtonView sizeToFit];

UIBarButtonItem* PrevButton = [[UIBarButtonItem alloc]  initWithBarButtonSystemItem:105 target:nil  action:nil]; //<
UIBarButtonItem*  NextButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:106  target:nil action:nil]; //>
UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(doneClicked:)];

UIBarButtonItem* flexSpace = [[UIBarButtonItem alloc]  initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *fake = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil] ;

[keyboardDoneButtonView setItems:[NSArray arrayWithObjects: PrevButton,fake, NextButton,fake,flexSpace,fake,doneButton,nil] animated:YES];

使用项来获取按钮上的精确缩放位置...