web-dev-qa-db-ja.com

Interface BuilderでIBOutletに接続できません

私は奇妙な経験をしています。任意のタイプのiPhoneアプリケーションを作成し、UIViewControllerとXibファイルを追加します。コントロールを使用してxibファイルを編集し、実行するとレンダリングされることを確認できます。ここで、コントローラーにいくつかのIBOutletを追加しようとしています。それらを.hファイルに追加し、.mファイルで合成します。次に、コンセントを接続するためにInterface Builderに向かいます。 UILabelをUIViewにドラッグしてから、ファイルオーナー(カスタムUIViewController)を接続しようとしましたが、UILabelに接続しようとしたときに選択できるのは「ビュー」だけですが、これは明らかに間違っています。したがって、IBOutletsをInterface Builderのコントロールに接続することができません。

何か案は?

25
haider

このスレッドでさまざまなことを組み合わせてやっと成功しました。

Interface Builder(xcodeではない)

  1. ファイル->すべてのクラスファイルを再ロード
  2. File-> Read Class Files(MyClass.hを選択)
  3. によってファイルの所有者を再接続
    a。クラスを「MyClass」に設定
    b。ビューをファイルの所有者のビューに再接続する

すべてが正常に戻りました。変だ。

これが混乱する以上に役立つことを願っています;-)

42
Kevin Fisher

Interface BuilderのFile-> Read Class Filesで、ファイルの所有者のクラスをポイントします。それで解決しました。

6
diatrevolo

同じ問題があった。

アイデンティティインスペクターでファイルの所有者の「クラス」属性を再確認して修正しました。

6
Suiz Uzcategui

ファイルの所有者がカスタムUIViewControllerに正しく設定されており、インスタンス変数にIBOutletキーワードを追加した後にsaved.hファイルを作成しましたか? およびプロパティ?

4
Ben S

.hファイルでアウトレットを適切なタイプとして定義していることを確認しましたか? IBのテキストフィールドを接続する場合、.hファイルは次のようになります。

IBOutlet UITextField    *MyTextField;

タイプがUITextField(またはUITextViewなど)であることを確認してください。それらをNSStringまたは適切でないものとして入力すると、Interface Builderでそれらを接続できません。

3
Michael

右クリック(またはCTRL)->ドロップダウンリストでUIコントロールをコードに接続できなかった場合、別の方法があります。インターフェイスビルダーで、Ctrlキーを押したまま、インターフェイスビルダーのメインウィンドウの[ファイルの所有者]からUIコントロール(ラベル、ボタンなど)にドラッグします。アウトレットによって定義されたすべてのdpopdownリストが表示されます。選択だけで1つ必要です!

3
Luiza Charmberg

私はあなたがしたのとほとんど同じ問題を抱えていました。あなたがまだ問題を解決したかどうかはわかりませんが、私はビューコントローラを含むすべてのクラスの名前を変更しましたが、ファイルの所有者の名前は変更されていません。それで、ファイルの所有者をダブルクリックしました->開いたウィンドウでiをクリックします->クラスフィールドの名前を新しいビューコントローラの名前に変更します。その後、うまくいきました。多分あなたはそれをもう一度試してみて、それが機能するかどうかを確認したいでしょう。幸運を。

3
chepukha

最長でも同じ問題が発生しました。クラスIDウィンドウでファイルの所有者の「タイプ」を「UIViewController」ではなく「MyClassViewController」に変更すると、問題が解決しました。 Fileの所有者タイプはUIViewControllerであるため、基本クラスに固有のプロパティのみを表示するため、これは理にかなっています。タイプをMyClassViewControllerに変更すると、そのアウトレットとすべての継承されたインスタンスにアクセスできます。お役に立てれば!

3
Adrian

File->Read Class Files (select MyClass.h)仕事をしてくれました。

2
Mr H

XCode -> Product -> Clean

私のために働いた。

2
Michael

同じ問題があり、ダイアトレボロの提案を試しました。「ファイル」、「クラスファイルの読み取り」の順にクリックし、ファイルの所有者クラスをポイントします。

これで解決しました。ダイアトレボロを+1しますが、まだ評判はありません...

1
martin jakubik

私にとっての問題は、MyUITextViewを拡張したUITextViewを作成していて、X-Codeが接続しないことでした。私の回避策は、IBOutletでUITextViewを一時的に使用して接続/リンクしてから、カスタムビューに変更することでした。

だから私は変わった。

IBOutlet MyUITextView *tv;

IBOutlet UITextView *tv;

接続/リンクされています。接続したら、OBOutletをMyUITextViewに戻しました。

IBOutlet MyUITextView *tv;
1
verma

毎回私を殺しますが、xcodeを閉じて再度開くだけで問題が解決することがあります...この正確な問題が発生しました...

1
Lior Frenkel

Xcode 5.1を再起動するとうまくいきました。

1
tboyce12

だから私はそれが自動的にIBOutlet接続をしない理由を正確には知りませんが、私は回避策を見つけました。カスタマービューコントローラーのインターフェイスビルダーのライブラリを使用して、コンセントを手動で追加する必要がありました。修正プログラムが.hファイルから自動的に読み取られるようになっている場合(そのように想定されているように)、彼らが投稿してくれればとてもありがたいです。

ありがとうございました

0
haider

私はこれでまったくの初心者ですが、同じ問題がありました。私はダイアトレボロの提案を試しに行き、そうすることで、私の問題の原因を突き止めました。最初に、ViewControllerをプロジェクト階層のランダムな場所に作成し、それをクラスフォルダーに移動しました。これは、実際のファイルがクラスフォルダーになかったが、プロジェクトはそれらがそうだと思ったので、IBが間違った場所を探していました。 Finderを使用して実際のファイルを実際のクラスファイルに移動し、プロジェクトで削除して再度追加しました。その後、すべてがうまくいきました!

0
mk.

私もここで問題を抱えていて、結局私のために働いたのは、Interface Builderを開く前にアプリをビルドすることでした。ブードゥー!

0
Jason

一部のXIBファイルをローカライズした後、ビューはInterface Builderで行われた更新に反応しませんでした。簡単な解決策はアプリをシミュレーター/デバイスから削除するでした。次のビルドと実行でアプリケーションが正しく更新されました。

これは、シミュレーターでXCodeを介してアプリをデプロイしているときにのみ発生しました。 XCodeがビルドを最適化しようとして混乱しているようです。

0
leviathan

私は書いた

@IBOutlet weak var title: UILabel!

uIViewControllerテキストファイル内で、ファイルからストーリーボードのラベルに接続し、それが機能しました!

0
coolcool1994