模拟按下iphone中方法调用中的按钮

时间:2012-01-17 21:13:40

标签: iphone objective-c xcode

我正在研究一个小计算器程序,我正在尝试添加一个可变按钮。我想要做的是,如果用户按下变量按钮,我想自动将此变量乘以之前键入的数字。我有方法:

- (IBAction)operationPressed:(UIButton *)sender

我有一个带*符号的按钮。现在,在变量压缩方法

- (IBAction)variablePressed:(UIButton *)sender

我想模拟按下时间按钮(*)。所以我有以下代码,例如

- (IBAction)variablePressed:(UIButton *)sender{
if (self.userIsInTheMiddleOfEnteringANumber) {
    [self operationPressed:<how to simulate pressing *???>];
}

提前致谢

评论后更新

这是一个RPN计算器,因此您可以将数字列表作为堆栈放入,然后按下操作按钮,它将从上到下对堆栈执行操作。 operationPressed方法:

- (IBAction)operationPressed:(UIButton *)sender
{
    if (self.userIsInTheMiddleOfEnteringANumber) [self enterPressed];
    double result = [self.brain performOperation:sender.currentTitle];

    self.display.text = [NSString stringWithFormat:@"%g", result];
    self.history.text = [self.history.text stringByAppendingString:sender.currentTitle];
}

所以当按下一个操作时,它会发送到performOperation方法,然后该方法决定要做哪个操作。我的解决方案(包括为测试添加一些变量值如下:

- (IBAction)variablePressed:(UIButton *)sender
{
    NSString * variable = sender.currentTitle;
    NSDictionary *testDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"4",@"x",@"10",@"y",@"2",@"z", nil];
    if (self.userIsInTheMiddleOfEnteringANumber) {
        [self enterPressed];
    }
    id numberForVariable = [testDictionary objectForKey:variable];

    [self.brain pushOperand:[numberForVariable doubleValue]];
    self.userIsInTheMiddleOfEnteringANumber = NO;
    self.history.text = [self.history.text stringByAppendingString:variable];
    //this is working pretty good. Now i need to make sure it works when i run program given values for variables.

}

4 个答案:

答案 0 :(得分:1)

试试这个:[button sendActionsForControlEvents:UIControlEventTouchUpInside];其中button指的是“时间按钮”。

答案 1 :(得分:0)

因此operationPressed消息会检查发件人决定要执行哪些操作的内容?我认为这可能不是一个好的设计。

但是,您是否可以查看operationPressed的实现,看看按钮是*按钮时它的作用是什么?而不是调用operationPressed,你应该只做operationPressed所做的事情。

或者,如果你想要追求这条路径而只是得到正确的按钮,operationPressed必须有办法访问按钮进行比较,对吧?您应该能够以相同的方式访问所需的按钮。

答案 2 :(得分:0)

假设OperationPressed采用UIButton,你不能简单地说

 [self operationPressed:sender];

答案 3 :(得分:0)

这就是你如何做到的 只需创建一个*(星号)按钮的对象,然后在变量压缩的方法中

IBOutlet UIButton *starBtn_Obj;

- (IBAction)variablePressed:(UIButton *)sender{
if (self.userIsInTheMiddleOfEnteringANumber) {
[self operationPressed:starBtn_Obj];
}

这将执行operationPressed方法,就像*(按下星形按钮)一样。