메서드가 여러 클래스를 허용하지만 IBOutlets를 사용하도록 허용하려면 다형성을 어떻게 사용합니까?

StackOverflow https://stackoverflow.com//questions/25089654

  •  02-01-2020
  •  | 
  •  

문제

나는 UIView 그리고 두 클래스 중 하나일 수 있는 객체를 여기에 전달하고 싶습니다.그래서 그것이 받아들인다고 말해보세요 UIView 동물을 상징하는 것인데, 저는 DogView 그리고 CatView 또는 잠재적으로 다른 동물 유형 클래스.

그 방법 내에서 nameLabel 모든 동물이 갖고 있는 시각.이 작업을 수행하려면 어떻게 설정해야 합니까?

나의 첫 번째 반응은 슈퍼 클래스(예: AnimalView) 그것은 nameLabel 변수를 지정한 다음 새 동물마다 하위 클래스로 분류합니다.그러나 내가 원하는 경우 nameLabel 콘센트가 되려면 IB에서 뷰를 연결하기 위해 모든 하위 클래스에 변수를 가질 수 없었기 때문에 설정 가능한 것 같지 않습니다.

나는 다음을 시도했다 Protocol, 그러나 그것은 다형성이 아니며 일반 슈퍼클래스를 통해 nameLabel 속성에 액세스할 수 없습니다. 그렇죠?Objective-C와 달리 나는 UIView <ProtocolName> 그러면 내가 그것을 요청할 수 있게 될 것입니다.

이 일을 어떻게 해야 할까요?저는 단지 다양한 종류의 객체를 전달할 수 있고 그것이 Interface Builder와 호환되기를 원합니다.완전히 다르게 접근해야 할까요?

도움이 되었습니까?

해결책

콘센트를 연결할 수 있습니다. label 다른 viewControllers 당신과 함께 SuperClass 스토리보드에서 만약 당신이 다르다면 viewControlelrs 스토리보드에서 Subclasses(SuperClass에서 파생됨) 스토리보드의 이름입니다.

1) 그냥 정의하세요

 class SuperClass{
     @IBOutlet weak var label: UILabel! = nil

 }

SubClass1 대표하다 view controller1 스토리보드에서 파생됨 SuperClass SubClass2 다른 것을 표현하다 view controller2 스토리보드에서 파생됨 SuperClass

2)가기보다 Assistant Editor 그리고 열어 SuperClass 한쪽과 다른 쪽 view controller1 콘센트를 연결하고 SuperClass 에게 label 스토리보드에서 view controller1.드래그 SuperClass label 스토리보드에 view controller1 enter image description here

3)이제 다시 열려요 SuperClass 한쪽과 다른 쪽 view controller2 콘센트를 연결하고 SuperClass 에게 label 스토리보드에서 view controller2.드래그 SuperClass label 스토리보드에 view controller2

클릭하면 SuperClass 콘센트보다 다른 viewController에 연결된 두 개의 레이블이 표시됩니다.

다른 팁

선언하다 IBOutlet 안에 superclass, AnimalView.그런 다음 Interface Builder에서 사용자 정의를 설정하고 나면 UIView's ID 검사기의 클래스는 다음과 같습니다. DogView, Connections Inspector로 이동하여 nameLabel 거기있을 게.

@interface Parent : UIView

@property (nonatomic,weak) IBOutlet UILabel *nameLabel;

@end

@interface Child : Parent

@end

enter image description here

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top