如何在 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 中确定操作的优先级(让它先执行)的主要内容,如果未能解决你的问题,请参考以下文章

在 Cocoa Touch 库中显示 UIWebView

控制主音量 - iPhone、Cocoa Touch

我如何在 Cocoa Touch 库中使用故事板

Cocoa Touch框架

如何使 Cocoa Touch 框架在应用程序中保持最新

如何解决 Cocoa touch 框架中的符号名称冲突