source

IBOutlet 및 IBAtion

gigabyte 2023. 4. 9. 21:33
반응형

IBOutlet 및 IBAtion

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

IBOutlets와 IBActions를 사용하지 않아도 차이가 있나요?


신속:

@IBOutlet weak var textField: UITextField!

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

목표-C:

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

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

IBAction ★★★★★★★★★★★★★★★★★」IBOutlet는 Interface Builder에서 참조할 수 있는 변수 및 메서드를 나타내기 위해 정의된 매크로입니다.

IBActionvoid ★★★★★★★★★★★★★★★★★」IBOutlet는 아무것도 해결하지 않지만 Xcode 및 Interface Builder에 대해 이러한 변수와 메서드를 Interface Builder에서 사용하여 UI 요소를 코드에 연결할 수 있음을 나타냅니다.

를 전혀 코드에 Interface Builder 를 지정할 .IBAction 및 IB에서 IBOutletIB 서 ib ib ib ib ib ib ib 。

Interface Builder에 나타나도록 메서드에 플래그를 붙이고 연결을 끌 수 있는 기존 방법은 메서드가 IBAtion 유형을 반환하도록 하는 것이었습니다.그러나 메서드를 무효로 하고(IBAtion은 #define'd to void), (id) 인수를 지정하면 메서드는 여전히 표시됩니다.이를 통해 유연성이 향상됩니다.

다음 3가지 모두 Interface Builder에서 확인할 수 있습니다.

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

자세한 내용은 Apple의 Interface Builder User Guide(Interface Builder 사용자 가이드), 특히 Xcode Integration(Xcode 통합) 섹션을 참조하십시오.

인터페이스 빌더(즉 IB 프리픽스)를 GUI 컴포넌트에 사용하는 경우 IBOutlet 및 IBAtion을 사용해야 합니다.IButlet은 어플리케이션의 속성을 IB의 컴포넌트와 관련짓기 위해 필요하며 IBAtion은 메서드를 IB의 액션과 관련짓기 위해 사용됩니다.

예를 들어 IB에서 버튼과 라벨을 정의한다고 가정합니다.버튼을 눌러 라벨 값을 동적으로 변경하려면 앱에서 다음과 같은 동작과 속성을 정의합니다.

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

그런 다음 IB에서 myLabel을 라벨에 연결하고 푸시미 방식을 버튼에 연결합니다.IB에 이러한 접속이 존재하기 위해서는 IBAtion과 IBOutlet이 필요합니다.

Interface Builder는 창/뷰에서 사용하는 인터페이스 컨트롤에 '배선'할 수 있는 멤버 및 메시지를 결정하기 위해 이러한 구성원과 메시지를 사용합니다.

IBOutlet과 IBAtion은 디자인 시 Interface Builder가 코드를 해석할 때 찾는 마커로서 컴파일러에 의해 생성된 코드에 영향을 주지 않습니다.

키-값 코딩을 보다가 다이어그램과 마주쳤는데 누군가 도움이 될 것 같아서요IBOutlet이 무엇인지 이해하는 데 도움이 됩니다.

플로우를 보면 IBOutlets가 속성 이름과 Nib 파일의 제어 이름을 일치시키기 위해 존재하는 것을 알 수 있습니다.

Nib 파일 로드 방법, Matt iOS6용 온라인 책 스크린샷

아웃렛은 코드에서 UI로의 링크입니다.UI 요소를 표시하거나 숨기려면 텍스트 필드의 텍스트를 가져오거나 요소(또는 100개)를 활성화 또는 비활성화하려면 소스에서 해당 개체의 출구를 정의하고 "인터페이스 개체"를 통해 UI 요소에 연결해야 합니다.그 후, 코드의 다른 변수와 같이 콘센트를 사용할 수 있습니다.

IBAtion : 사용자 인터페이스 오브젝트에 의해 트리거되는 특수한 메서드.Interface Builder가 인식합니다.

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

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

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

IBAction 및 IBOutlets는 Interface Builder에서 작성된 인터페이스를 컨트롤러와 연결하기 위해 사용됩니다.Interface Builder를 사용하지 않고 인터페이스를 완전히 코드로 빌드하지 않으면 사용하지 않고 프로그램을 만들 수 있습니다.그러나 실제로는 대부분 Interface Builder를 사용하고 있습니다.인터페이스에서 인터랙티브를 사용하려면 IBActions와 IBoutlet을 사용해야 합니다.

질문의 주요 댓글 중 하나는 다음과 같습니다.

모든 답변이 같은 유형의 아이디어를 언급하고 있습니다.그러나 IBAction/IBOutlet을 소스에 포함하지 않으면 인터페이스 빌더가 동일하게 동작하는 이유는 설명되지 않습니다.IBAtion과 IBOutlet의 다른 이유가 있나요? 아니면 그냥 놔둬도 될까요?


NSHipster는 이 질문에 잘 대답합니다.

IBAtion

https://nshipster.com/ibaction-iboutlet-iboutletcollection/ #ibaction

2004년 이전에는 IBAtion은 Interface Builder에 의해 인식되는 메서드에 더 이상 필요하지 않았습니다.서명이 있는 모든 방법-(void){name}:(id)sender콘센트 페인에 표시됩니다.

그럼에도 불구하고 많은 개발자들은 특정 메서드가 액션에 의해 연결되어 있음을 나타내기 위해 메서드 선언에서 IBAtion 반환 유형을 사용하는 것이 여전히 유용하다고 생각합니다.Storyboards/XIB를 사용하지 않는 프로젝트에서도 IBAtion을 사용하여 목표/액션 방법을 호출할 수 있습니다.

IBOutlet:

https://nshipster.com/ibaction-iboutlet-iboutletcollection/ #iboutlet

IBAtion과 달리 IBOutlet은 Storyboard 또는 XIB의 객체와 코드의 속성을 연결하기 위해 여전히 필요합니다.

IBOutlet 접속은 보통 뷰 또는 컨트롤과 그 관리 뷰 컨트롤러 사이에 확립됩니다(이는 뷰 컨트롤러가 응답 측에 의해 실행되는 IBAction에 추가하여 이루어지는 경우가 많습니다).그러나 IBOutlet을 사용하여 다른 컨트롤러나 참조 뷰 컨트롤러가 액세스할 수 있는 속성과 같은 최상위 속성을 노출할 수도 있습니다.

IBOutlet

  • 그것은 재산이다.
  • nib(IB) 파일이 로드되면 인스턴스 변수에 연결되는 캡슐화된 데이터의 일부가 됩니다.
  • 각 접속은 아카이브 해제 후 재정립됩니다.

IBAtion

  • 속성은 메서드가 Interface Builder의 스토리보드에서 연결할 수 있는 작업임을 나타냅니다.

@ - 다이내믹 패턴 IB - 인터페이스 빌더

Interface Builder를 사용하면 Connections Inspector를 사용하여 이벤트핸들러로 이벤트를 설정할 수 있습니다이벤트 핸들러는 IBAtion 수식자를 가진 함수여야 합니다.보기는 동일한 유형의 참조 및 IBOutlet 수식자와 연결할 수 있습니다.

더 이상 필요하지 않다는 것을 몰랐습니다.이것들은 인터페이스 빌더가 소스 내에서 그것들을 찾을 수 있도록 하기 위해 사용되었습니다.즉각 IBAtion이 필요한 것은 IBAtion이 인터페이스 빌더에서 호출할 수 있는 방법을 변경할 필요가 있었기 때문입니다.그러나 @objc도 같은 것을 이미징하고 있습니다.그 방법이나 인터페이스가 무엇을 해야 하는지 기록하기 때문에 개인적으로 계속 사용할 생각입니다.

언급URL : https://stackoverflow.com/questions/1643007/iboutlet-and-ibaction

반응형