猿问

以编程方式将iPhone键盘顶部的工具栏对齐

在某些情况下,我想在iPhone键盘的顶部添加一个工具栏(例如,在导航表单元素时,例如在iPhone Safari中)。

目前,我正在使用常量指定工具栏的矩形,但是由于界面的其他元素在变动中-屏幕顶部的工具栏和导航栏-每次我们进行较小的界面更改时,工具栏都会偏离对齐状态。

有没有办法以编程方式确定键盘相对于当前视图的位置?


一只斗牛犬
浏览 653回答 3
3回答

慕码人2483693

从iOS 3.2开始,有一种新方法可以实现此效果:UITextFields并UITextViews具有一个inputAccessoryView属性,您可以将其设置为任何视图,该属性会自动显示在上方并使用键盘进行动画处理。请注意,您使用的视图既不应位于其他视图层次中,也不应将其添加到某些超级视图中,这是为您完成的。

皈依舞

所以基本上:在init方法中:NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];[nc addObserver:self selector:@selector(keyboardWillShow:) name: UIKeyboardWillShowNotification object:nil];[nc addObserver:self selector:@selector(keyboardWillHide:) name: UIKeyboardWillHideNotification object:nil];然后使用上面提到的方法来调整条的位置:-(void) keyboardWillShow:(NSNotification *) note{    CGRect r  = bar.frame, t;    [[note.userInfo valueForKey:UIKeyboardBoundsUserInfoKey] getValue: &t];    r.origin.y -=  t.size.height;    bar.frame = r;}通过将位置变化动画化,可以使其变得漂亮    [UIView beginAnimations:nil context:NULL];    [UIView setAnimationDuration:0.3];//...    [UIView commitAnimations];

HUH函数

这基于tonklon的现有答案 -我只是添加一个代码段,该代码段在键盘顶部显示一个半透明的黑色工具栏,并在右侧显示一个“完成”按钮:UIToolbar *toolbar = [[[UIToolbar alloc] init] autorelease];[toolbar setBarStyle:UIBarStyleBlackTranslucent];[toolbar sizeToFit];UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];UIBarButtonItem *doneButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(resignKeyboard)];NSArray *itemsArray = [NSArray arrayWithObjects:flexButton, doneButton, nil];[flexButton release];[doneButton release];[toolbar setItems:itemsArray];[aTextField setInputAccessoryView:toolbar];和-resignKeyboard看起来像:-(void)resignKeyboard {  [aTextField resignFirstResponder];}希望能对某人有所帮助。
随时随地看视频慕课网APP
我要回答