2013-06-23 40 views
0

我正在学习针对iOS的Objective-C编程,并且遇到了一个小问题。我正在构建一个基本的RPN计算器,我正在努力让用户可以输入浮点数。但是,我需要防止他们输入非法的浮点数(如1324.343.34)。我试着添加一个BOOL和一个if语句,但它太乱了,所以我只是添加了一个单独的动作,如果他们按下“。”。不幸的是,尽管decimalPressed操作是第二次,它仍然在数字按下操作之前,我需要它后去。有任何想法吗?如何在Cocoa Touch中优先考虑一个动作(让它先行)

- (IBAction)digitPressed:(UIButton *)sender 
{ 
    NSString *digit = [sender currentTitle]; 
    if (self.userIsInTheMiddleOfEnteringANumber) { 
     if (self.dotPressed == NO || ([digit isEqualToString:@"."]==NO)) { 
      self.display.text = [self.display.text stringByAppendingString:digit]; 
      self.dotPressed = NO; 
     } 
    } else { 
     self.display.text = digit; 
     self.userIsInTheMiddleOfEnteringANumber = YES; 
    } 
} 

- (IBAction)decimalPressed:(UIButton *)sender { 
    self.dotPressed = YES; 
} 

回答

0

你是否在代码或界面生成器中将按钮连接到自己的操作?

您可以更改“。”按钮的decimalPressed:方法被称为“触摸里面”而不是“触摸里面”。确保digitPressed:方法被称为“触摸里面”。

这将确保首先调用decimalPressed:,当按下按钮时,然后在释放按钮时调用digitPressed:

您可以直接在代码中执行此操作,也可以在Xcode中使用Interface Builder执行此操作。

+0

这将工作,谢谢。但我觉得它只是绕过这个问题,而这更像是一个学习问题。就像,如果一个按钮转到两个动作(或3,4等),我该如何选择它到底是哪个? – Acoustic77

+0

我会假设它会按照您添加目标/操作的顺序调用它们。如果你使用Interface Builder,我建议删除你的UI和按钮之间的连接,并尝试使用UIButton的代码添加它们: - (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents) controlEvents;希望有所帮助! –

+0

是的,我试图打破连接,并按照我希望它们运行的​​顺序添加它们,但没有成功。我只是改变了行动完成的任务,这解决了问题,但我仍然没有学会如何去做我想要的事。 – Acoustic77