1

独自のキーパッドの作成に関するチュートリアルを終了しました。そこで、その知識を利用して、独自のキーパッドで 2 つの数字を加算する、本当にシンプルなアプリを作成しました。たった2つの数字です。しかし、一方のテキストフィールドをタップすると、もう一方のテキストフィールドが編集されます! コードを同封しました。どんな助けでも大歓迎です。そして、以前のすべてのヘルプに対して @spacious に感謝します。

#import "KeyPad2ViewController.h"

@interface KeyPad2ViewController ()
@property (nonatomic) BOOL userIsEnteringANumber;
@end

@implementation KeyPad2ViewController
@synthesize numberOne;
@synthesize numberTwo;
@synthesize result;
@synthesize keyPad;
@synthesize userIsEnteringANumber;
@synthesize currentTextField;


- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if ([numberOne isFirstResponder]) 
{
    self.currentTextField = self.numberOne;
    self.userIsEnteringANumber = NO;
}
else if ([numberTwo isFirstResponder])
{
    self.currentTextField = self.numberTwo;
    self.userIsEnteringANumber = NO;
}
return YES;

}    

- (void)viewDidLoad
{
[super viewDidLoad];
[numberOne setInputView:keyPad];
[numberTwo setInputView:keyPad];
numberOne.delegate = self;
numberTwo.delegate = self;
// Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload
{
[self setNumberOne:nil];
[self setNumberTwo:nil];
[self setResult:nil];
[self setKeyPad:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
} else {
    return YES;
}
}

- (IBAction)buttonPressed:(UIButton *)sender 
{
NSString *button = [sender currentTitle];
NSRange decimalpoint = [self.currentTextField.text rangeOfString:@"."];
if (self.userIsEnteringANumber)
{
    if ([button isEqualToString:@"."] && decimalpoint.location != NSNotFound)
    {
        self.currentTextField.text = self.currentTextField.text;
    }else 
        self.currentTextField.text = [self.currentTextField.text stringByAppendingString:button];
}else 
{
    self.currentTextField.text = button;
    self.userIsEnteringANumber = YES;
}
}

- (IBAction)backspacePressed:(UIButton *)sender 
{
if (self.userIsEnteringANumber)
{
    int positionOfDigitBeforeLastOne = self.currentTextField.text.length -1;
    if (self.currentTextField.text.length > 0)
    {
        self.currentTextField.text = [self.currentTextField.text substringToIndex:positionOfDigitBeforeLastOne];
    }
    if (self.currentTextField.text.length == 0)
        self.currentTextField.text = @"";
}
}

- (IBAction)clearPressed:(id)sender 
{
currentTextField.text = [NSString stringWithFormat:@""];
}

- (IBAction)enterPressed:(UIButton *)sender 
{
[self hideKeyPad];
}

- (IBAction)signPressed:(UIButton *)sender 
{
NSString *negativeNumber = @"-";
NSString *firstCharInDisplay = @"";
if (self.userIsEnteringANumber)
{
    firstCharInDisplay = [self.currentTextField.text substringToIndex:1];
    if ([firstCharInDisplay isEqualToString:@"-"])
    {
        self.currentTextField.text = [self.currentTextField.text substringFromIndex:1];
    }else {
        negativeNumber = [negativeNumber stringByAppendingString:self.currentTextField.text];
        self.currentTextField.text = negativeNumber;
    }
}
}

- (IBAction)add:(UIButton *)sender 
{
float a = [[numberOne text] floatValue];
float b = [[numberTwo text] floatValue];

float c = a + b;

[result setText:[NSString stringWithFormat:@"%.2f", c]];
}

- (void)showKeyPad
{
[UIView beginAnimations:@"animateView" context:nil];
[UIView setAnimationDuration:0.3];
CGRect keypadview = CGRectMake(0, 270, 320, 190); // puts keyboard on screen
keyPad.frame = keypadview;
keyPad.alpha = 1.0;
[UIView commitAnimations];

}

- (void)hideKeyPad
{
[UIView beginAnimations:@"animateView" context:nil];
[UIView setAnimationDuration:0.3];
CGRect keypadview = CGRectMake(0, 640, 320, 190);  // puts keyboard off screen
keyPad.frame = keypadview;
keyPad.alpha = 1.0;
[UIView commitAnimations];
}

@end

そして私の.hファイルは

#import <UIKit/UIKit.h>

@interface KeyPad2ViewController : UIViewController <UITextFieldDelegate>

@property (weak, nonatomic) IBOutlet UITextField *numberOne;
@property (weak, nonatomic) IBOutlet UITextField *numberTwo;
@property (weak, nonatomic) IBOutlet UILabel *result;
@property (strong, nonatomic) IBOutlet UIView *keyPad;
@property (weak, nonatomic) UITextField *currentTextField;

- (IBAction)buttonPressed:(UIButton *)sender;
- (IBAction)backspacePressed:(UIButton *)sender;
- (IBAction)clearPressed:(UIButton *)sender;
- (IBAction)enterPressed:(UIButton *)sender;
- (IBAction)octopusPressed:(UIButton *)sender;
- (IBAction)signPressed:(UIButton *)sender;
- (IBAction)add:(UIButton *)sender;

@end

ありとあらゆる助けに感謝します。このサイトは本当に最高です!!

4

1 に答える 1

0

メソッドが呼び出されたときtextFieldShouldBeginEditing:、最初のレスポンダーはまだ正しいフィールドに設定されていません。この問題を修正するには、textFieldShouldBeginEditing:をに置き換えてください。textFieldDidBeginEditing:

于 2012-07-29T12:36:12.917 に答える