2016-07-20 6 views
0
- (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]; 

    } 

간단한 계산기의 일부 코드는 단추가 만들어지고 디스플레이에 배치되는 인스턴스 메서드입니다. 내 질문 :객관적인 C 간단한 계산기 addNumber 인스턴스 메서드에 대한 질문

  1. .frame의 statement. numberButton.frame ... 그게 뭐니? 왜 필요한거야?
  2. [numberButton addTarget:self action:@selector(numberSelected:) forControlEvents: UIControlEventTouchUpInside]; 버튼 내부를 터치하면 for 루프에서 초기화 된 int 값이 헤더 파일에 선언 된 numberSelected 메소드로 전송됩니다.

시간을 내 주셔서 감사합니다.

답변

0
  1. numberButton.frame 귀하는 버튼을 화면에 배치하는 방법을 알려줌으로써 버튼의 프레임을 설정하게됩니다. 이 수퍼은 X = 29, Y = 367.5가요 및 크기,보다 구체적으로, 폭은 58이다 높이가 50

    이다에서 인스턴스

CGRectMake(29, 367.5, 58,50) 그 화면에서 버튼의 시작 위치를 말하는

컨트롤러가 버튼을 만드는 방법을 알지 못해 크기 나 시작 위치가 무엇인지 명확하게 지정해야합니다. 이것을 지정하지 않으면 높이가 0이고 너비가 0이고 위치가 (0, 0) 인 버튼이 표시됩니다.

<올 시작 = "2">
  • [numberButton addTarget을 : 자기 조치 : @ 선택기 (numberSelected forControlEvents :) : UIControlEventTouchUpInside];

  • 이 문장은 버튼을 누르거나 눌렀을 때 numberSelected라는 메서드를 호출해야하며 해당 메서드에는 단추 자체의 인스턴스 인 매개 변수가 있어야한다는 메시지가 표시됩니다. 그래서, 기본적으로 어딘가 같은 컨트롤러 클래스에서, 당신은

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

    이 방법과 아무 상관이 루프 내부에서 생성 int 값 같은 - 서명 된 방법이있다. 당신은 그 int 값을 전달하지 않고, 매개 변수로 버튼 자체를 전달합니다.

    0

    스택 오버플로로 전환하기 전에 많은 Apple 설명서를 읽어 보시기 바랍니다. 거기에 아주 분명하고 깔끔하게 묘사 된 것에 대해 혼란스러워합니다.

    하지만 직접 귀하의 질문에 대답 :
    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 메서드는 설명서의 해당 부분에서 자세히 설명합니다.