【问题标题】:How to prioritize an action (Make it go first) in Cocoa Touch如何在 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;
}

【问题讨论】:

    标签: ios objective-c cocoa-touch uibutton action


    【解决方案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 个方法。
    猜你喜欢
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多