Задача c простым калькулятором вопросы о методе экземпляра addNumber

   - (IBAction)addButton; {
        for (int i = 0; i<10; i++) {
        UIButton *numberButton = [UIButton buttonWithType : UIButtonTypeRoundedRect];
        [numberButton addTarget:self action:@selector(numberSelected:) forControlEvents: UIControlEventTouchUpInside];

        [numberButton setTitle: [NSString stringWithFormat:@"%d", i] forState: UIControlStateNormal];

        if (i<1) {
            numberButton.frame = CGRectMake(29, 367.5, 58,50);
        }
        if (i>=1 && i<4) {
            numberButton.frame = CGRectMake((i*.5)*(58/i)+68*(i-1), 332.5, 58,50);
        }
        if (i>=4 && i<7) {
            numberButton.frame = CGRectMake((i*.5)*(58/i)+68*(i-4), 297.5, 58,50);
        }
        if (i>=7 && i<10) {
            numberButton.frame = CGRectMake((i*.5)*(58/i)+68*(i-7), 262.5, 58,50);
        }

        [self.view addSubview:numberButton];

    }

Вот некоторый код из простого калькулятора, это метод экземпляра, где кнопки создаются и располагаются на дисплее. Мои вопросы:

  1. .frame в заявлении numberButton.frame ... что это делает? зачем это нужно?
  2. в этом заявлении [numberButton addTarget:self action:@selector(numberSelected:) forControlEvents: UIControlEventTouchUpInside]; он говорит, что при нажатии кнопки внутри он отправит значение int, инициализированное в цикле for, методу numberSelected, объявленному в заголовочном файле?

Спасибо за ваше время, Майкл.

2 ответа

  1. От numberButton.frame Вы устанавливаете рамку своей кнопки, сообщая своей кнопке, как позиционировать себя на экране.

Например, CGRectMake(29, 367.5, 58,50) говорит, что на экране начальная позиция вашей кнопки в суперпредставлении равна x = 29 и y = 367,5, а ее размер, в частности, ширина 58, а высота 50.

Необходимо точно указать, так как ваш контроллер не знает, как создать вашу кнопку, имея в виду, какой будет ее размер или начальная позиция. Если вы не укажете это, у вас будет кнопка с 0 высотой и 0 шириной и, вероятно, из (0, 0) позиции.

  1. [numberButton addTarget: собственное действие:@selector(numberSelected:) forControlEvents: UIControlEventTouchUpInside];

Это утверждение говорит, что когда вы нажимаете / нажимаете кнопку, он должен вызывать метод с именем numberSelected, и у этого метода есть параметр, который является экземпляром самой кнопки. Итак, в основном где-то в одном классе контроллера у вас есть метод с сигнатурой

-(void) numberSelected:(UIButton*)sender;

Значение int, которое вы создаете внутри цикла, не имеет ничего общего с этим методом. Вы не передаете это значение типа int, вы передаете саму кнопку в качестве параметра.

Я предлагаю вам прочитать много документации Apple, прежде чем немедленно обратиться за помощью к Stack Overflow. Вы, кажется, смущены вещами, которые очень четко и четко описаны там.

Но, чтобы ответить на ваши вопросы напрямую:

  1. "Рамка" UIView описывает его положение в суперпредставлении, то есть представление, в котором оно содержится. Представления могут содержать другие представления, которые содержат другие представления, вложенные вместе. Подобно изображению в рамке рисунка, у вас есть изображение (ваша кнопка), и вам нужно указать системе, где разместить это изображение на стене (в этом простом случае - окно). https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/WindowsandViews/WindowsandViews.html

  2. Ваш второй метод использует UIControlEventTouchUpInside сказать:"Когда пользователь касается этой кнопки и поднимает ее, находясь внутри экранной области кнопки(коснитесь... вверх... внутри)", он должен вызвать метод с именем "numberSelected:". Это отличается от немедленного вызова метода, когда палец пользователя касается экрана. Кроме того, если пользователь касается кнопки, проводит пальцем за пределы изображения кнопки, а затем поднимает, метод вызываться не будет.

    ":" Означает, что вы собираетесь передать значение этому методу, и система фактически сделает это за вас. Будет отправлено нажатие кнопки в качестве параметра, переданного параметру "numberSelected:"

    UIButton является подклассом UIControl, а addTarget:action:forControlEvents метод подробно описан в этой части документации.

Другие вопросы по тегам