симулировать нажатие кнопки в вызове метода в iphone - PullRequest
0 голосов
/ 18 января 2012

Я работаю над маленькой программой калькулятора и пытаюсь добавить переменную кнопку. Что я хотел бы сделать, так это то, что если пользователь нажимает кнопку переменной, я бы хотел автоматически умножить эту переменную на число, набранное ранее. У меня есть метод:

- (IBAction)operationPressed:(UIButton *)sender

и у меня есть кнопка с символом *. Теперь внутри переменной нажата метод

- (IBAction)variablePressed:(UIButton *)sender

Я хотел бы смоделировать нажатие кнопки времени (*). Итак, у меня есть следующий код, например

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

Заранее спасибо

ОБНОВЛЕНИЕ после комментариев

Это калькулятор RPN, поэтому вы можете поместить его в список чисел в виде стека, а затем нажимать кнопки управления, и он будет выполнять операции со стеком сверху вниз. ОперацияПрессованный метод:

- (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];
}

поэтому, когда операция нажата, она отправляется методу executeOperation, который затем решает, какую операцию выполнить. Мое решение (включая добавление некоторых значений переменных для тестирования) следующее:

- (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 ]

1 голос
/ 18 января 2012

Попробуйте: [button sendActionsForControlEvents:UIControlEventTouchUpInside];, где button обозначает вашу «кнопку времени».

0 голосов
/ 18 января 2012

вот как ты можешь это сделать просто создайте объект кнопкой * (звездочка), затем в переменной нажмите метод

IBOutlet UIButton *starBtn_Obj;

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

это приведет к выполнению операции. Нажмите метод, как если бы * (была нажата звездочка).

0 голосов
/ 18 января 2012

при условии, что OperationPressed использует UIButton, вы не можете просто сказать

 [self operationPressed:sender];
0 голосов
/ 18 января 2012

Итак, сообщение operationPressed проверяет, что отправитель должен решить, какую операцию выполнить?Я думаю, что это, вероятно, не очень хороший дизайн.

Но вы можете посмотреть на реализацию operationPressed и посмотреть, что она делает, если кнопка - кнопка *?Вместо того, чтобы звонить operationPressed, вы должны просто делать то, что operationPressed делает в нужном вам случае.

В качестве альтернативы, если вы хотите пойти по этому пути и просто взять нужную кнопку, operationPressed должен иметь способ доступа к кнопкам для сравнения, верно?Вы должны иметь возможность доступа к нужной кнопке таким же образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...