65

アプリのストーリーボードで作成したUIViewControllerと、プロジェクトに追加したカスタムUIViewControllerサブクラスがあります(ターゲットのコンパイルフェーズに正しくあります)。ただし、ストーリーボードのビューコントローラで「カスタムクラス」プロパティを設定しようとすると、カスタムクラスがリストに表示されません。

  • クラスがテストではなく、アプリのターゲットの一部であることを確認しました。
  • それがUIViewControllerのサブクラスであることを再確認しました
  • xcodeが最新の情報で動作していることを確認するためにコンパイルされたプログラム
  • xcodeを再起動しました

「カスタムクラス」ドロップダウンにクラスが表示されない原因は何ですか?

4

26 に答える 26

46

問題を解決するために私が見つけた2つの方法ですが、それらは回避策です:-

  1. テキストフィールドにビューコントローラの名前を入力するか、
  2. プロジェクトを閉じてから再度開くと、プロジェクトの初期化でファイルがリストに追加されます。
于 2013-01-04T00:26:42.660 に答える
45

それでも問題が解決しない場合、または同じ問題が発生する可能性がある場合:

ストーリーボードでは、「ビュー」(ストーリーボードのビューをクリックすると自動的に選択される)ではなく、「ViewController」を選択してください。これら2つの違いは、View Controllerを選択すると、アプリの周囲に青い長方形がポップアップすることです。ビューコントローラを確実に選択するには、ドキュメントのアウトラインを開き、ストーリーボード階層で直接選択します。

ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください

于 2014-02-24T17:57:32.570 に答える
14

私は次のことを試みます:

  1. クラスを実装するファイルがビルドフェーズの一部であることを確認します( [ターゲット] > [ビルドフェーズ]で確認します)
  2. ビルドフェーズ.mにファイルを追加します(まだ追加されていない場合)。
  3. Xcodeを再起動します。
于 2013-01-02T22:51:15.067 に答える
12

これは、ストーリーボードのXMLを編集することで修正できます。

  1. プロジェクトナビゲータパネルでMy.storyboardエントリを右クリックし、[名前を付けて開く]->[ソースコード]メニューを選択します。XMLでViewControllerエントリを見つけて、属性を追加します。customClass="MyController"

  2. ストーリーボードを保存します。

  3. Project NavigatorパネルMy.storyboardでエントリをもう一度右クリックし、[ Open As]-> [InterfaceBuilder]-[Storyboard ]メニューの選択肢を選択します。

MyControllerこれで、カスタムクラスエントリにクラス名が含まれます。

于 2015-07-31T02:28:01.920 に答える
6

クラスがUIViewControllerから継承していることを確認してください。

@interface ClassName : UIViewController
于 2014-01-02T03:41:47.907 に答える
5

Xcode 8では、いくつかのクラスのファイルの場所に間違ったパス(大文字と小文字が区別されます)が指定されていました。

MyProject/mysubdirectory/MyViewController.xib (.m, .h)

vs:

MyProject/MySubdirectory/MyViewController.xib (.m, .h)

どのようにしてその状態になったかは本当にわかりませんが、私のプロジェクトは上記とまったく同じ動作を示し(IBにアウトレット/アクションが表示されない)、そのパスを修正すると問題が修正されました。

私はこの2つの異なる方法を修正しました。1つの方法は、.pbxprojファイルを開き、大文字と小文字を区別する問題を手動で修正することでした。もう1つの方法は、ファイルの[ファイルインスペクター]タブの[IDとタイプ]セクションにあるフォルダーアイコンをタップし、そこでファイルを再選択することでした。

于 2017-01-02T00:00:18.380 に答える
3

ストーリーボードで別のビューコントローラをクリックし、そのカスタムクラスプルダウンをクリックして、新しいクラスが一覧表示されていることを確認しますが、選択しないでください。作成した新しいViewControllerをクリックして戻ると、カスタムクラスプルダウンメニューに表示されているはずです。奇妙な、え?ただリフレッシュを強制すると思います。

于 2014-07-09T07:06:33.957 に答える
3

私はこの問題で説明されているのと同じ問題を抱えていました。しかし、提案された答えのどれも私のためにそれを修正しませんでした。私のプロジェクトは警告やエラーなしで正常にコンパイルされましたが、.hファイルには、私のアウトレットがストーリーボード要素にリンクされたことを示す「アウトレット」インジケーターがありませんでした。

さらに、右クリックしてヘッダーファイルにドラッグすることにより、コードに新しいアウトレットを作成しようとしても、ヘッダーソースがこの操作の潜在的なターゲットとして認識されませんでした。さらに、私のクラスは、ViewControllerのプロパティインスペクターパネルの[カスタムクラス]ドロップダウンに表示されませんでした。

それでも、プロジェクトは正常にコンパイルされました。

よく調べてみると、自分のクラスを次のように定義したことがわかりました...

@interface KJBMainDataViewTrackConMk2<UIScrollViewDelegate> : UIViewController

どうやらうまくコンパイルされます。

ただし、これを次のように変更すると(プロトコルを最後まで移動)...

@interface KJBMainDataViewTrackConMk2 : UIViewController<UIScrollViewDelegate>

その後、すべてが生き返ります。すべてのアウトレットは、ストーリーボード要素に「接続されている」と突然示されます。そして、右クリックドラッグが再び機能し始め、私のカスタムクラスがストーリーボードViewControllerのプロパティインスペクターパネルのカスタムクラスドロップダウンに表示されます!

ここでの他の答えはおそらくこの状態の最も可能性の高い原因を表していますが、少なくともこのもう1つの潜在的な原因について言及する価値があると感じました。

于 2016-03-07T17:45:07.767 に答える
3

私は同じ問題を抱えていましたが、他の解決策はどれも私にはうまくいきませんでした。私にとっての問題は、MacとiOSのターゲットがあり、どちらも同じViewControllerの独自のバージョンを持っていることでした。たとえば、Mac用のFooViewControllerという名前のファイルの.h / .mペアと、iOS用のFooViewControllerという名前のファイルの別の.h/.mペアがありました。各ペアはそれぞれのターゲットに適切に含まれていましたが、何らかの理由でXcodeがそれを気に入らず、ストーリーボードのビューコントローラーの[カスタムクラス]ドロップダウンにビューコントローラーが表示されませんでした。最終的にiOSViewControllerでクラスの名前を変更すると、すぐにドロップダウンに表示されました。

于 2016-05-05T04:06:09.733 に答える
2

私の場合、新しいTableViewControllerオブジェクトをストーリーボードにドラッグしますが、サブクラスが「UIViewController」である新しいファイルを追加します。次に、サブクラスが「UITableViewController」であるファイルを追加します。問題は解決しました。

于 2017-01-01T12:59:22.473 に答える
2

ずっと試してもこの問題が解決しない場合は、おそらく。のView代わりにクリックしたことが原因ですViewController

ViewControllerクリックしたときにファイルを選択する必要があります。

これで私の問題は解決しました。

ここに画像の説明を入力してください

于 2019-03-01T22:43:42.983 に答える
1

私はたまたまこの問題に遭遇し、前の提案を試した後、運がなかった。最後に、その理由はヘッダーファイルのタイプがに設定されていることであることがわかりましたC++ headerC header(他のすべてのヘッダーファイルと同様に)に変更すると、クラスがドロップリストに表示されます。理由はわかりませんが...他の人にも役立つかもしれないので、ここに投稿します。

于 2015-03-24T16:15:43.317 に答える
1

Storyboardはカスタムクラスを探していますが、物理的には存在せず、リストにカスタムクラス名が表示されず、アウトレットも表示されません。次の解決策は私にとって完璧に機能しました。

  1. コードを別の場所にコピーするだけです(デスクトップで言いましょう)
  2. 既存のコードを開きます。
  3. カスタムクラスファイルを削除します。(ゴミ箱に移動)
  4. 次に、コピーしたプロジェクトフォルダからファイルを追加します(デスクトップから)
  5. 「必要に応じてコピー」チェックボックスをオンにすることを忘れないでください
  6. ストーリーボードとビンゴを開くと、ドロップダウンにカスタムクラスファイルが表示されます
于 2015-09-08T12:21:01.547 に答える
0

最初にCustomViewControllerをグループまたはフォルダーに追加しないようにしてください。アプリのルートに配置します。

于 2014-02-05T18:47:19.290 に答える
0

上記(または以下:)のどれも私を助けませんでした。私はそれを見つけましたが

  1. ストーリーボードに新しいビューコントローラを追加した後(ドラッグするだけで)
  2. File \ New \ File \ Objective-C Classでクラスを追加し、XIBなしで名前を付け、Next、Create

ストーリーボードでビューコントローラを選択し、それにクラスを割り当てようとすると、クラスがありません

しかし

ビューコントローラ自体にあるビューをクリックした場合は、カスタムクラスのクラスドロップダウンメニューをクリックします

その後

ビューコントローラを選択し(ビューコントローラの下のバーをクリック)、カスタムクラスのクラスドロップダウンをもう一度クリックすると、新しく追加したクラスが魔法のように表示されます。

奇妙な、さわやかなバグであるに違いありません。Xcodeバージョン5.1(5B130a)

于 2014-05-27T21:03:24.293 に答える
0

クラスをアタッチするViewControllerを選択していることを確認してください。簡単な方法は、ビューコントローラを開いDocument Outlineて選択することです(ストーリーボードからビューコントローラをタップすると、意図したオブジェクトが選択されない場合があります)。

于 2014-11-30T14:33:02.583 に答える
0

私の場合、どういうわけかバンドルリソースが削除されたので、追加して作業しました。

ビルドフェーズ->ビルドフェーズの追加->バンドルリソースのコピーファイルを検索し、そこにファイルをドラッグアンドドロップします

次に、ターゲットメンバーシップがチェックされていることを確認します。

于 2015-12-12T00:27:12.947 に答える
0

私の場合、間違ったUIを選択したので、クラスファイルを削除して新しいファイルを作成し、正しい親クラスを選択しました

于 2016-03-30T10:55:18.050 に答える
0

XCode 7.3(7D175)を再起動する必要がありました

于 2016-06-13T11:24:31.563 に答える
0

プロジェクトナビゲータでファイルをクリックし、[場所]ドロップダウンボックスの下の[IDとタイプ]の下にあるファイルインスペクタで、小さなフォルダアイコンをクリックして、ポップアップウィンドウでファイルを選択しました。 。

于 2016-12-22T22:31:55.213 に答える
0

プロジェクトをクリーンアップし、Macを再起動してみてください。私が行った独特なことの1つは、すべてのカスタムクラスの名前を変更し、プロジェクトを再構築することでした。機能した!

于 2017-02-06T13:20:11.790 に答える
0

プロジェクトの場合macOS、新しいクラスを作成すると、NSObject代わりにから継承するクラスが生成されNSViewControllerます。

から変更する

import Cocoa

class AppsViewController: NSObject {

}

import Cocoa

class AppsViewController: NSViewController {

}
于 2018-09-08T06:43:20.347 に答える
0

上記の答えのどれも私の問題を解決しなかったので、私はこの問題にかなり不満を感じました。

私の場合:Swift View Controllerファイルの作業中に、アクティブな変更(カスタムコレクションセルクラスの作成など)を行っていました。私はコードブロックを完成させておらず、次のように開いたままにしました:

class tableViewCell: UITableViewCell { 
}
class collectionCell: 


class viewController: UIViewController {
     override func viewDidLoad(){
     super.viewDidload()

     }

}

不完全なコードブロック'collectionCell2'に注意してください。これは、xcodeが私のviewControllerファイルをそのように認識しないのに十分でした。このブロックを完了すると、ファイルはオプションとしてxcodeに再表示されました。

とてもばかげてシンプルです。

于 2019-09-25T14:28:59.987 に答える
0

ビューコントローラがストーリーボードの同じタイプと一致していることを確認してください。

于 2020-06-23T20:30:49.553 に答える
0

私の場合、swiftファイル名はswiftクラス名とは異なります。

ファイル名はViewControllerTest.swift で、クラス名はViewController.swiftでした。

両方を一般名に変更した後、私の問題は解決しました

上記の変更後にXcodeを再起動します

于 2021-03-21T13:53:47.900 に答える
-1

のクラス名が目的の名前であることを確認してくださいViewController。すなわち

class MyCustomNameViewController: UIViewController {
.
.
} 

ファイル名だけを変更するだけでは不十分です。

于 2017-04-25T00:11:05.423 に答える