1

私は obj-c を学んでいて、 2 uitextfields, label&を持つアプリを作成するという簡単なタスクを自分自身に与えましたbutton(ボタンは 2 つの数値を要約し、結果をラベルに表示します)。textfieldsこのアプリを作成しましたが、「完了」ボタンと「数字のみ」を一緒に操作する方法がわかりません。

以下は私のコードです:

#import UIKit/UIKit.h

@interface ViewController : UIViewController

@property IBOutlet UILabel *label;
@property IBOutlet UITextField *textField1;
@property IBOutlet UITextField *textField2;
@property NSInteger textFieldInt1, textFieldInt2;
@property NSString *textFieldStr1, *textFieldStr2;

-(IBAction)button:(id)sender;
-(IBAction)hideKeyboard:(id)sender;

@end


#import "ViewController.h"

@interface ViewController ()
@end

@implementation ViewController

@synthesize label, textField1, textField2, textFieldInt1, textFieldInt2, textFieldStr1, textFieldStr2;

-(IBAction)button:(id)sender {
    textFieldInt1=[textField1.text integerValue];
    textFieldInt2=[textField2.text integerValue];
    label.text=[NSString stringWithFormat: @"%d", textFieldInt1+textFieldInt2];
    [self.view endEditing:YES];
}



- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

    [self.textField1 setReturnKeyType:UIReturnKeyDone];
    [self.textField2 setReturnKeyType:UIReturnKeyDone];

}

-(IBAction)hideKeyboard:(id)sender
{
    [self.view endEditing:YES];
}

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range     replacementString:(NSString *)string {
    if(![string intValue] && ![string isEqualToString:@""] && ![string isEqualToString:@"0"])
    {
    return NO;
    } else {
    return YES;
    }
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    [self.view endEditing:YES];
    [super touchesBegan:touches withEvent:event];
}


@end

また、すべてのアウトレット ( 、、 )との両方textFieldsに(ストーリーボードで) 接続しました。hideKeyboard (didEndOnExit)buttonbutton (touchUpInside)textfieldsbuttonlabel

問題は、 numbers only入力が で機能しないことdoneです。delegate(両方に接続されたストーリーボードの新しい参照アウトレット)を使用すると、入力がtextfields得られますが、ボタンが機能しません (iPhone でボタンを押しても何も起こりません)。使用しない場合、入力は取得できますが、正常に動作します (押すと iPhone キーボードが非表示になります)。numbers onlytextfieldsdonedelegateall charactersdone

ここで私が間違っているかもしれない提案はありますか?

4

1 に答える 1

0

UITextFieldDelegate メソッドを実装します。

// This is how we get rid of the keyboard.
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    //Do whatever you need to to save etc...
    [textField resignFirstResponder];
    return NO;
}

これにより、完了ボタンが押されたときにキーボードが非表示になります。ビューコントローラーをテキストフィールドのデリゲートとして設定してください: myTextField.delegate = self; (おそらくviewDidLoadで)

于 2012-11-14T16:50:18.173 に答える