web-dev-qa-db-ja.com

IBの制約にアウトレット接続を作成できません

私はiOS 7でXCode 5を実行しています。レイアウトの前にUITextViewの高さの制約を動的に変更する必要があります。これは、IBの制約からソースコードへのアウトレット接続を作成することで実行できることを述べた多くの投稿を見てきました。 IBの制約アウトレットから所有クラスのヘッダーファイルへの接続を作成しようとしていますが、接続を作成できません-接続を作成するときのように、ヘッダーファイルをドラッグしてもIBが「強調表示」されません。ボタンなどの他のオブジェクトから.

誰かが以前にこれに遭遇したことがありますか?すべての助けは大歓迎です。

22
johnnyspo

これは私がそれをしている写真です。制約からヘッダーファイルにコントロールをドラッグしています。

enter image description here

実際には、IBOutletプロパティをパブリックにしたくないので、実装ファイルの匿名カテゴリにコントロールドラッグする傾向があります。これもその写真です。申し訳ありませんが、このスクリーンショットはカーソルを表示していません。ストレッチラインの下端にあります。

enter image description here

50
matt

次の方法でコンセントを接続できます。

  1. アシスタントエディターを開いてから、Ctrlキーを押しながらテキストビューをそれぞれのヘッダーファイルにドラッグします。テキストビュー用に作成されたプロパティが表示されます。

  2. 手動で@property(nonatomic,retain)IBOutlet UITextField *yourTextField;と入力します。アシスタントエディターを開き、小さな空の円(プロパティの左側)からビューコントローラーの対応するコントロールにドラッグします。

それでも接続を確立できない場合は、クリーンアップしてプロジェクトを保存し、再試行してください。

2
motox

UIViewクラスで接続を作成しようとしていますか?ストーリーボードのそのシーンに関連付けられているUIViewControllerクラスでのみ接続を作成できるようです。

したがって、ビュー自体から実行する場合は、回避策がおそらく適切です。

1
David

私はこの答えに遅れると思いますが、それでもそれを書く価値があるかもしれません。同様の問題がありました。ビューのファイル所有者を正しく設定していませんでした。 アシスタントエディター を使用して簡単なテストを実行できます。アシスタントエディターでビューコントローラーの automatic を選択できない場合は、ファイルの所有者が正しく設定されていないことを意味します。 viewcontrollerが.xibファイルと同じ名前であることを確認します(多くの場合そうです)。

これにより、制約を含むすべてのIBOutletを接続できます。

まだ、IBの制約に接続できません。ただし、テキストビューの高さの制約をIBのプレースホルダーにして、ビューのinitWithCoderで作成するNSLayoutConstraintに置き換えることで、問題を回避しました。作成した制約への参照を維持し、その「定数」プロパティを必要に応じて変更します。

私はおそらくこの回避策を使い続けるでしょうが、もし誰かが元の問題で私を助けることができれば、それは大歓迎です。

0
johnnyspo