Objective c简单计算器关于addNumber实例方法的问题

时间:2016-07-20 07:52:18

标签: objective-c instance-methods

   - (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. 语句numberButton.frame中的.frame ......这是做什么的?为什么有必要?
  2. 在这个语句中[numberButton addTarget:self action:@selector(numberSelected:) forControlEvents: UIControlEventTouchUpInside];是说当在里面触摸一个按钮时它会将for循环中初始化的int值发送到头文件中声明的numberSelected方法吗?
  3. 感谢您的时间迈克尔。

2 个答案:

答案 0 :(得分:0)

  1. 通过numberButton.frame,您可以通过告诉按钮如何在屏幕上定位自己来设置按钮的框架。
  2. 对于实例,CGRectMake(29, 367.5, 58,50)表示屏幕上你的按钮在其超级视图中的起始位置是x = 29和y = 367.5,并且尺寸更具体地说是宽度是58,身高是50。

    必须明确指定,因为您的控制器不知道如何创建按钮,意味着它的大小或起始位置。如果你没有指定这个,你将有一个0高度和0宽度的按钮,可能来自(0,0)位置。

    1. [numberButton addTarget:self action:@selector(numberSelected :) forControlEvents:UIControlEventTouchUpInside];

    2. 这句话说当你按下/按下按钮时,它应该调用一个名为numberSelected的方法,该方法有一个参数,该参数是按钮本身的实例。所以,基本上在同一控制器类的某个地方,你有一个带有签名的方法,如 -

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

      您在循环内创建的int值与此方法无关。您没有传递该int值,而是传递按钮,它本身就是参数。

答案 1 :(得分:0)

我建议你阅读很多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方法在文档的该部分中有详细解释。