如何在 Cocoa Touch 中确定操作的优先级(让它先执行)
Posted
技术标签:
【中文标题】如何在 Cocoa Touch 中确定操作的优先级(让它先执行)【英文标题】:How to prioritize an action (Make it go first) in Cocoa Touch 【发布时间】:2013-06-23 20:55:59 【问题描述】:我正在学习 ios 的 Objective-C 编程,但遇到了一个小问题。我正在构建一个基本的 RPN 计算器,并且我正在努力让用户可以输入浮点数。但是,我需要防止他们输入非法浮点数(如 1324.343.34)。我尝试添加一个 BOOL 和一个 if 语句,但它太乱了,所以我只是为他们按下“。”添加了一个单独的操作。不幸的是,即使decimalPressed动作是第二个,它仍然在数字按下动作之前,我需要它在之后。有任何想法吗?
- (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;
【问题讨论】:
【参考方案1】:您是在代码中还是在 Interface Builder 中将按钮与它们的操作关联起来?
你可以改变“。”按钮的decimalPressed:
方法在“内部触地”而不是“内部触地”上调用。确保在“touch up inside”中调用了digitPressed:
方法。
这将确保在按下按钮时首先调用decimalPressed:
,然后在释放按钮时调用digitPressed:
。
您可以直接在代码中执行此操作,也可以使用 Xcode 中的 Interface Builder。
【讨论】:
那行得通,谢谢。但我觉得它只是规避了问题,更像是一个学习问题。例如,如果一个按钮执行两个操作(或 3、4 等),我该如何选择它首先执行的操作? 我会假设它按照您添加目标/动作的顺序调用它们。如果您使用的是 Interface Builder,我建议您删除 UI 和按钮之间的连接,并尝试使用 UIButton 将它们添加到代码中: - (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)控制事件;希望有帮助! 是的,我尝试断开连接并按照我希望它们运行的顺序添加它们,但没有成功。我只是改变了action做的东西,解决了问题,但我还没有学会如何做我想做的事 UIKit 不保证首先调用哪个动作。依赖他们的订单是一种不好的做法。您只需要对按钮执行一项操作,然后在该操作中调用需要按顺序排列的 2 个方法。以上是关于如何在 Cocoa Touch 中确定操作的优先级(让它先执行)的主要内容,如果未能解决你的问题,请参考以下文章