メソッドが複数のクラスを受け入れることを可能にするために多態性を使用するにはどうすればよいですか?

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

  •  02-01-2020
  •  | 
  •  

質問

私は受け入れる特定の方法を持っています UIView オブジェクト、および2つのクラスのいずれかになることができるオブジェクトを渡したいと思います。だから、それは受け入れると言う UIView それは動物を表し、私は渡すことができるようにしたい DogView とa CatView または潜在的に他の動物タイプのクラス。

そのメソッド内で私は設定したい nameLabel すべての動物が持っているビュー。私はこれを行うことができるようにそれを設定するにはどうすればよいですか?

私の最初の反応は、スーパークラスを持つことでした(次のような AnimalView)を持っている nameLabel その上に変数を設定し、新しい動物ごとにサブクラス化します。しかし、私が望むなら nameLabel アウトレットであるためには、ビューをIBに配線するためにすべてのサブクラスに変数を持つことができなかったため、設定可能ではないようです。

私はその後、試してみました Protocol, 、しかし、それは多態性ではなく、一般的なスーパークラスを介してnameLabelプロパティにアクセスすることはできませんか?Objective-Cとは異なり、私はaを求めることができませんでした UIView <ProtocolName> そして、それは私がそれを求めることを可能にするでしょう。

どのように私はこれを行う必要がありますか?私はちょうど別の種類のオブジェクトを渡すことができ、それがInterface Builderと互換性があるようにしたいと思っています。私はそれに完全に異なって近づくべきですか?

役に立ちましたか?

解決

のコンセントを接続することができます label 異なるに viewControllers あなたのと SuperClass ストーリーボードから あなたの別の場合 viewControlelrs によるストーリーボードの再設定では、 Subclasses(スーパークラスから派生した)ストーリーボードの名前。

1)定義するだけ

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

 }

SubClass1 レパセント view controller1 から派生したストーリーボードで SuperClass SubClass2 別のものを再確認してください view controller2 から派生したストーリーボードで SuperClass

2)に行くよりも Assistant Editor とオープン SuperClass 一方の側と他方の側 view controller1 からコンセントを接続し、 SuperClasslabel ストーリーボードで view controller1.からドラッグ SuperClass label でストーリーボードに view controller1 enter image description here

3)今再び開いています SuperClass 一方の側と他方の側 view controller2 からコンセントを接続し、 SuperClasslabel ストーリーボードで view controller2.からドラッグ SuperClass label でストーリーボードに view controller2

をクリックすると SuperClass あなたは別のviewcontrollerにconneted二つのラベルが表示されますよりも出口

他のヒント

IBOutlet superclassに属するAnimalViewを宣言します。その後、Interface Builderで、Identity InspectorにカスタムUIView'sクラスをDogViewに設定したら、接続インスペクタとnameLabelに移動します。

@interface Parent : UIView

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

@end

@interface Child : Parent

@end
.

画像の記述ここで

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top