如果用户在返回键盘键盘之前按下按钮,如何将按钮的操作应用于文本字段

时间:2013-11-16 23:40:24

标签: ios uibutton uitextfield

我正在做一个简单的计算器,它会对用户在触摸按钮时输入的数字进行乘法运算。它的工作正常,但如果用户在按键完成之前按下按钮,计算器将无法工作,因为用户没有按下完成,因此没有存储任何值。因此,如果用户在按下按钮之前按下按钮,如何确保存储该值。

enter image description here

m文件的代码

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic,copy) NSString* number;
@property (nonatomic) double ans;
@end

@implementation ViewController

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

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

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    self.number= self.enteredValue.text;
    if (textField == self.enteredValue) {
        [textField resignFirstResponder];
        self.ans = [self.enteredValue.text doubleValue];
        self.answer.text = [NSString stringWithFormat:@"%f",self.ans];
    }
    NSLog(@"%f",self.ans);
    return YES;
}

- (IBAction)multiplierPressed:(UIButton *)sender {

    self.answer.text = [NSString stringWithFormat:@"%f",self.ans*10];
}

@end

头文件

 #import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITextField *enteredValue;

- (IBAction)multiplierPressed:(UIButton *)sender;
@property (weak, nonatomic) IBOutlet UILabel *answer;

@end

1 个答案:

答案 0 :(得分:1)

您已经确定了问题的原因:只有在用户点按“完成”并使用该值时才会保存该值。你怎么解决这个问题?好吧,您可以在用户输入内容时随时保存值。加载视图控制器时,为文本更改事件添加新操作:

[textField addTarget:self 
              action:@selector(textFieldDidChange:) 
    forControlEvents:UIControlEventEditingChanged];

当文本字段中的文本发生变化时,这将使textFieldDidChange:方法被调用。

或者,您可以停止将值保存到您自己的实例变量中,并在用户点击x10按钮时使用当前在文本字段中的值。

- (IBAction)multiplierPressed:(UIButton *)sender {
    float enteredValue = [self.textField.text floatValue];
    self.answer.text = [NSString stringWithFormat:@"%f", enteredValue * 10];
}

在这种情况下,您必须在视图控制器中声明一个textField属性,并在Interface Builder中指定它。