我正在研究一个小计算器程序,我正在尝试添加一个可变按钮。我想要做的是,如果用户按下变量按钮,我想自动将此变量乘以之前键入的数字。我有方法:
- (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.
}
答案 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方法,就像*(按下星形按钮)一样。