[objective-c] IB 아울렛 및 IBAction

Xcode 및 Interface Builder에서 IBOutlets 및 IBAction을 사용하는 목적은 무엇입니까?

IBOutlets 및 IBActions를 사용하지 않으면 차이가 있습니까?


빠른:

@IBOutlet weak var textField: UITextField!

@IBAction func buttonPressed(_ sender: Any) { /* ... */ }

목표 -C :

@property (nonatomic, weak) IBOutlet UITextField *textField;

- (IBAction)buttonPressed:(id)sender { /* ... */ }



답변

IBActionIBOutlet인터페이스 빌더로 지칭 될 수 나타내고 변수 및 방법에 정의 된 매크로이다.

IBAction로 확인 void하고 IBOutlet아무것도 해결되는, 그러나 그들은 이러한 변수와 메소드 엑스 코드와 인터페이스에 빌더한다는 의미는 코드에 링크 UI 요소에 인터페이스 빌더에서 사용할 수 있습니다.

Interface Builder를 전혀 사용하지 않을 경우 코드에서 필요하지 않지만 IBActionIB에서 사용할 메소드와 IBOutlet객체 에 대해 지정해야 합니다. IB에서 사용될 것입니다.


답변

인터페이스 빌더에 표시되도록 메소드를 플래그 지정하고 연결을 끌어 올 수있는 전통적인 방법은 메소드가 유형 IBAction을 리턴하도록하는 것입니다. 그러나 메소드를 void로 설정하고 대신 (IBAction은 # define’d void), (id) 인수를 제공하면 메소드가 여전히 표시됩니다. 이것은 추가 유연성을 제공합니다.

이 세 가지 모두 Interface Builder에서 볼 수 있습니다.

-(void) someMethod1:(id) sender;
-(IBAction) someMethod2;
-(IBAction) someMethod3:(id) sender;

자세한 내용은 특히 Apple의 인터페이스 빌더 사용 설명서를 참조하십시오 (특히 Xcode 통합 섹션).


답변

GUI 구성 요소에 인터페이스 빌더 (따라서 IB 접 두부)를 사용하는 경우 IBOutlet 및 IBAction을 사용해야합니다. IBOutlet은 애플리케이션의 특성을 IB의 컴포넌트와 연관시키는 데 필요하며 IBAction은 메소드를 IB의 조치와 ​​연관시키는 데 사용됩니다.

예를 들어, IB에서 단추와 레이블을 정의한다고 가정하십시오. 버튼을 눌러 레이블 값을 동적으로 변경하려면 앱에서 다음과 유사한 동작 및 속성을 정의합니다.

UILabel IBOutlet *myLabel;
- (IBAction)pushme:(id)sender;

그런 다음 IB에서 myLabel을 레이블과 연결하고 pushme 메소드를 단추와 연결합니다. 이러한 연결이 IB에 존재하려면 IBAction 및 IBOutlet이 필요합니다.


답변

Interface Builder는이를 사용하여 창 /보기에서 사용중인 인터페이스 컨트롤에 ‘연결’할 수있는 멤버 및 메시지를 결정합니다.

IBOutlet과 IBAction은 디자인 타임에 코드를 구문 분석 할 때 Interface Builder가 찾는 마커로서 순수하게 존재하며 컴파일러에서 생성 한 코드에는 영향을 미치지 않습니다.


답변

키-값 코딩을 보면서 다이어그램을 살펴보면 누군가에게 도움이 될 것이라고 생각했습니다. IBOutlet이 무엇인지 이해하는 데 도움이됩니다.

흐름을 살펴보면 IBOutlets가 속성 이름과 Nib 파일의 컨트롤 이름을 일치시키기 위해서만 있다는 것을 알 수 있습니다.

nib 파일로드 방법, iOS6 용 Matt 온라인 설명서의 스크린 샷


답변

콘센트는 코드에서 UI 로의 링크입니다. UI 요소를 표시하거나 숨기려면 텍스트 필드의 텍스트를 가져 오거나 요소 (또는 다른 수백 가지)를 활성화 또는 비활성화하려면 소스에서 해당 객체의 콘센트를 정의하고 해당 콘센트를 연결해야합니다 “인터페이스 객체”를 통해 UI 요소에 그런 다음 코딩의 다른 변수와 마찬가지로 콘센트를 사용할 수 있습니다.

IBAction – 사용자 인터페이스 개체에 의해 트리거되는 특수한 방법입니다. 인터페이스 빌더가이를 인식합니다.

@interface Controller
{
  IBOutlet id textField; // links to TextField UI object
}

- (IBAction)doAction:(id)sender; // e.g. called when button pushed

자세한 내용은 Apple Docs 를 참조하십시오.


답변

IBAction 및 IBOutlets는 Interface Builder에서 만든 인터페이스를 컨트롤러와 연결하는 데 사용됩니다. Interface Builder를 사용하지 않고 코드로 인터페이스를 완전히 빌드하지 않으면 인터페이스를 사용하지 않고 프로그램을 만들 수 있습니다. 그러나 실제로 우리 대부분은 Interface Builder를 사용합니다. 일단 인터페이스에서 대화 형 기능을 사용하려면 IBActions 및 IBoutlet을 사용해야합니다.