这是我的第一篇文章,我对iOS编程还比较陌生。我正在使用xcode 4.3,并有一个很简单的问题:如何在键盘上方放置一个带有上/下按钮的工具栏。我已经找了很多教程来解决这个问题,但这些教程大多针对interface builder的旧版本。我在网上和苹果开发者网站上找到了一些代码,但现在遇到了错误:“assignment to readonly property”,说明我的代码可能有问题。我知道问题可能很简单,但由于从旧版本移植代码到新版本时可能出现问题,导致现在不知道哪里出了差错。请有经验的人士检查一下我的代码并指出问题所在,非常感谢。我已经包含了我的.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
实现
#import "keyboardViewController.h"
@interface keyboardViewController ()
@end
@implementation keyboardViewController
@synthesize textField1;
@synthesize textField2;
@synthesize keyboardToolbar;
- (void)viewDidLoad
{
[super viewDidLoad];
if (keyboardToolbar == nil)
{
keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)];
UIBarButtonItem *previousButton = [[UIBarButtonItem alloc] initWithTitle:@"previous"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(previousField:)];
UIBarButtonItem *nextButton = [[UIBarButtonItem alloc] initWithTitle:@"next"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(nextField:)];
UIBarButtonItem *extraSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:(UIBarButtonSystemItemFlexibleSpace) target:nil action:nil];
UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:(UIBarButtonSystemItemDone) target:self action:@selector(resignKeyboard:)];
[keyboardToolbar setItems:[[NSArray alloc] initWithObjects:previousButton, nextButton, extraSpace, done, nil]];
textField1.inputAccessoryView = keyboardToolbar;
textField2.inputAccessoryView = keyboardToolbar;
}
}
-(void) resignKeyboard:(id)sender
{
if ([textField1 isFirstResponder])
[textField1 resignFirstResponder];
else if ([textField2 isFirstResponder])
[textField2 resignFirstResponder];
}
-(void) previousField:(id)sender
{
if ([textField1 isFirstResponder])
[textField2 becomeFirstResponder];
else if ([textField2 isFirstResponder])
[textField1 becomeFirstResponder];
}
-(void) nextField:(id)sender
{
if ([textField1 isFirstResponder])
[textField2 becomeFirstResponder];
else if ([textField2 isFirstResponder])
[textField1 becomeFirstResponder];
}
- (void)viewDidUnload
{
[self setTextField1:nil];
[self setTextField2:nil];
[self setKeyboardToolbar:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
@end