Iphone 在Xcode 4.3中将UIToolbar放置在键盘上

Iphone 在Xcode 4.3中将UIToolbar放置在键盘上,iphone,ios4,uitoolbar,Iphone,Ios4,Uitoolbar,这是我的第一篇文章,我对在iOS中编程很陌生。我正在使用xcode 4.3,有一个可能很简单的问题。我到处寻找一种方法,在键盘上方放置一个工具栏,上面有一个prev/next按钮。在xcode使用interface builder时,我发现了一些关于如何做到这一点的教程。但是我找不到最新版本的xcode。因此,我在互联网上和苹果开发网站上找到了一些东西,并提出了一些代码。唯一的问题是,它不起作用!我得到一个错误,在带有InputAccessoryView的行上,表示赋值为只读属性。我知道这可能很

这是我的第一篇文章,我对在iOS中编程很陌生。我正在使用xcode 4.3,有一个可能很简单的问题。我到处寻找一种方法,在键盘上方放置一个工具栏,上面有一个prev/next按钮。在xcode使用interface builder时,我发现了一些关于如何做到这一点的教程。但是我找不到最新版本的xcode。因此,我在互联网上和苹果开发网站上找到了一些东西,并提出了一些代码。唯一的问题是,它不起作用!我得到一个错误,在带有InputAccessoryView的行上,表示赋值为只读属性。我知道这可能很简单,但在将代码从以前的版本转移到新版本时,我很可能弄错了什么。有人能检查一下我的代码,让我知道我做错了什么吗。非常感谢。我已经包括了我的.h/.m文件

    #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];
}