iPhone:如何修复inputAccessoryView到View?

时间:2011-07-21 23:43:22

标签: ios iphone uitextfield uitoolbar

我有一个工具栏,我需要在编辑文本时使用,否则。

在之前的应用中,我手动移动了工具栏(收听通知等)

但我想使用inputAccessoryView ...所以在我的viewDidLoad,我做

for (/*myTextFields*/) {
   textField.inputAccessoryView = keyboardToolbar;
}
[self.view addSubView:keyboardToolbar];

哪个工作正常,工具栏出现,我点击一个文本字段,工具栏向上滑动 - 一切都很好。 但是当我隐藏键盘时,inputAccessoryView将我的工具栏拖离屏幕。有没有办法告诉inputAcessoryView它的固定位置在哪里? - 或者我是否必须回到我以前听取通知等的方式......?

2 个答案:

答案 0 :(得分:2)

我通过听取通知并移动工具栏来解决这个问题......哦,好吧。

这样的事情就完成了工作:

- (void)viewWillAppear:(BOOL)animated 
{
    [super viewWillAppear:animated];
    /* Listen for keyboard */
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}
- (void)keyboardWillShow:(NSNotification *)notification 
{
    [keyboardToolbar setItems:itemSetFull animated:YES];
    /* Move the toolbar to above the keyboard */
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    CGRect frame = self.keyboardToolbar.frame;
    frame.origin.y = self.view.frame.size.height - 210.0;
    self.keyboardToolbar.frame = frame;
    [UIView commitAnimations];
}

- (void)keyboardWillHide:(NSNotification *)notification 
{
    [keyboardToolbar setItems:itemSetSmall animated:YES];
    /* Move the toolbar back to bottom of the screen */
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    CGRect frame = self.keyboardToolbar.frame;
    frame.origin.y = self.view.frame.size.height - frame.size.height;
    self.keyboardToolbar.frame = frame;
    [UIView commitAnimations];
}

我猜输入配件视图实际上只是用于粘在键盘顶部的东西:)

答案 1 :(得分:1)

我最近发现了这个问题,似乎很少有人这样做。所以,我想引导您回答这个问题:https://stackoverflow.com/a/24855095/299711,我将在下面复制:

将您的UIToolbar分配给视图控制器中的属性:

@property (strong, nonatomic) UIToolbar *inputAccessoryToolbar;

在顶视图控制器中,添加以下方法:

- (BOOL)canBecomeFirstResponder{

    return YES;

}

- (UIView *)inputAccessoryView{

    return self.inputAccessoryToolbar;

}

然后(可选,因为通常不需要),只要键盘被隐藏,只需致电:

[self becomeFirstResponder];

这样,您的inputAccessoryToolbar将成为您的视图控制器和文本视图的输入附件视图。