Iphone 在Xcode 4.3中将UIToolbar放置在键盘上
这是我的第一篇文章,我对在iOS中编程很陌生。我正在使用xcode 4.3,有一个可能很简单的问题。我到处寻找一种方法,在键盘上方放置一个工具栏,上面有一个prev/next按钮。在xcode使用interface builder时,我发现了一些关于如何做到这一点的教程。但是我找不到最新版本的xcode。因此,我在互联网上和苹果开发网站上找到了一些东西,并提出了一些代码。唯一的问题是,它不起作用!我得到一个错误,在带有InputAccessoryView的行上,表示赋值为只读属性。我知道这可能很简单,但在将代码从以前的版本转移到新版本时,我很可能弄错了什么。有人能检查一下我的代码,让我知道我做错了什么吗。非常感谢。我已经包括了我的.h/.m文件Iphone 在Xcode 4.3中将UIToolbar放置在键盘上,iphone,ios4,uitoolbar,Iphone,Ios4,Uitoolbar,这是我的第一篇文章,我对在iOS中编程很陌生。我正在使用xcode 4.3,有一个可能很简单的问题。我到处寻找一种方法,在键盘上方放置一个工具栏,上面有一个prev/next按钮。在xcode使用interface builder时,我发现了一些关于如何做到这一点的教程。但是我找不到最新版本的xcode。因此,我在互联网上和苹果开发网站上找到了一些东西,并提出了一些代码。唯一的问题是,它不起作用!我得到一个错误,在带有InputAccessoryView的行上,表示赋值为只读属性。我知道这可能很
#import <UIKit/UIKit.h>
@interface keyboardViewController : UIViewController
@property (retain, nonatomic) IBOutlet UIView *textField1;
@property (retain, nonatomic) IBOutlet UIView *textField2;
@property (nonatomic, retain) UIToolbar *keyboardToolbar;
-(void)resignKeyboard:(id)sender;
-(void)previousField:(id)sender;
-(void)nextField:(id)sender;
@end
粘贴这些代码
for (id view in self.view.subviews) {
if ([view isKindOfClass:[UITextField class]]) {
[(UITextField *)view setInputAccessoryView:keyboardToolbar];
}
}
粘贴此代码
textField1.inputAccessoryView = keyboardToolbar;
textField2.inputAccessoryView = keyboardToolbar;
-(void) resignKeyboard:(id)sender{
[self.view endEditing:YES];
}
而不是这个
-(void) resignKeyboard:(id)sender
{
if ([textField1 isFirstResponder])
[textField1 resignFirstResponder];
else if ([textField2 isFirstResponder])
[textField2 resignFirstResponder];
}
在viewDidLoad方法中添加此代码
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
及
当文本字段类型为UIKeyboardTypeNumberPad时,当您准备添加“完成按钮”时,UIToolbar非常有用。这是因为默认情况下没有“完成”按钮。为此,您只需添加以下内容:-
UIToolbar *boolbar = [UIToolbar new];
boolbar.barStyle = UIBarStyleBlackTranslucent;
[boolbar sizeToFit];
UIBarButtonItem *leftBarButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneBtnClicked)];
NSArray *array = [NSArray arrayWithObjects:cancelleftBarButton, nil];
[leftBarButton release];
[boolbar setItems:array];
textField_phnNumber.inputAccessoryView = boolbar;
//由选择器执行的方法
-(void)doneBtnClicked{
[textField_phnNumber resignFirstResponder];
}
注意:-如果您正在使用UITextField,请在TextFieldDidBegineEdit委托方法中添加此项。此代码在键盘上方UIToolbar的右侧创建“完成”按钮:
UIToolbar *tbAboveKeyboard = [[UIToolbar alloc] init];
tbAboveKeyboard.barStyle = UIBarStyleBlackTranslucent;
[tbAboveKeyboard sizeToFit];
UIBarButtonItem *flexibleSpaceLeft = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *rightBarButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonClicked:)];
NSArray *array = [NSArray arrayWithObjects:flexibleSpaceLeft, rightBarButton, nil];
[rightBarButton release];
[tbAboveKeyboard setItems:array];
yourTextView.inputAccessoryView = tbAboveKeyboard;
[tbAboveKeyboard release];
巴拉,非常感谢你的回复。我试试看。谢谢你的帮助!巴拉,我把密码都改了,谢谢!现在,我用按钮“上一步”、“下一步”和“完成”打开工具栏。“完成”按钮起作用,但“上一个”和“下一个”按钮不起作用。我是否需要在头文件中为它们设置atproperty?或者是我的atselector不正确。再次感谢你的帮助!![[NSNotificationCenter defaultCenter]添加观察者:自选择器:@selector(keyboardWillShow:)名称:UIKeyboardWillShowNotification对象:nil];只需将此添加到您的viewDidLoad方法Bala中,我是否将其放在[super viewDidLoad]之后;或者我把它放在if语句中。现在它在if语句中,我得到一个错误。对此我真的很抱歉,但我真的很生气。我正在尝试让这个应用程序工作,这样我就可以让我的学生帮他们做一些计算!再次感谢你,巴拉。对不起,这给了我一个信号错误。等等,我刚看到你贴的其他东西!将再次修复!!!UUGGGHHH,我希望我更聪明!阿沙德,我的“完成”按钮现在起作用了。但不是另外两个?知道我哪里出错了吗?我遵循了Bala的所有代码更正。感谢所有的帮助。可能是这些按钮上的选择器(方法)不起作用。尝试查看这些按钮执行的方法。尝试使用调试器和NSLog。谢谢您的回答!有人能把答案翻译成swift代码吗?
UIToolbar *boolbar = [UIToolbar new];
boolbar.barStyle = UIBarStyleBlackTranslucent;
[boolbar sizeToFit];
UIBarButtonItem *leftBarButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneBtnClicked)];
NSArray *array = [NSArray arrayWithObjects:cancelleftBarButton, nil];
[leftBarButton release];
[boolbar setItems:array];
textField_phnNumber.inputAccessoryView = boolbar;
[textField_phnNumber resignFirstResponder];
UIToolbar *tbAboveKeyboard = [[UIToolbar alloc] init];
tbAboveKeyboard.barStyle = UIBarStyleBlackTranslucent;
[tbAboveKeyboard sizeToFit];
UIBarButtonItem *flexibleSpaceLeft = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *rightBarButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonClicked:)];
NSArray *array = [NSArray arrayWithObjects:flexibleSpaceLeft, rightBarButton, nil];
[rightBarButton release];
[tbAboveKeyboard setItems:array];
yourTextView.inputAccessoryView = tbAboveKeyboard;
[tbAboveKeyboard release];
- (void)doneButtonClicked:(id)sender
{
[searchTextField resignFirstResponder];
}