問題タブ [loadnibnamed]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - ios:フレームの高さを取得してメモリを破壊するためにXIBを一時的にロードするのはなぜですか?
独自のXIBで定義されているいくつかのUITableCellViewの高さを取得しようとしています。UITableViewDelegateのコールバックheightForRowInPathIndexで使用される高さのリストを作成します。これを行うと、アプリケーションがメモリの破損のようにクラッシュします。
私はretainCountを調べましたが、期待どおりです。
ios - nibファイルで指定されたものとは異なるセル識別子を使用してテーブルビューセルをロードする方法
// 実際の質問
nib で指定されたものとは異なるセル識別子を使用して、nib ファイル (tableviewcell) をロードする際に助けが必要です。
// 私がやっていることの背景 私は
いくつかのラベル、いくつかの画像、いくつかのボタンを持つカスタム UITableViewCell を持っています。これらはすべて nib ファイルに配置されています。テーブルビュー セルのコンテンツは、特定の条件に基づいて動的に変更する必要があります。つまり、横長の場合はボタンが表示されません。ラベルに表示するコンテンツがない場合、ラベルは表示されません。左側の隣接するラベル/ビューは、欠落しているラベル/ボタンのスペースを埋めるために拡張する必要があります。
私はこれを機能させることができます。私がこれを行った方法は、cellForRowAtIndexPath
I - を使用して
表示する必要のないビューを削除し、
調整が必要なビューを呼び出します。 removeFromSuperView
frame
setNeedsDisplay
セルをデキューするために、nib ファイルに記載されているのと同じセル識別子を使用します。返されたセルが nil の場合、 を使用しloadNibNamed:withOwner:options
て nib をロードします。ただし、再利用されているセルには、既に削除されている可能性があるため、条件が満たされていない場合にコンテンツを表示するために必要なビューがない可能性があるため、前後にスクロールすると問題が発生するのではないかと心配しています。
この問題を修正するために、セルの異なるルック アンド フィールをトリガーするさまざまな条件に対して、異なるセル識別子を使用することを計画しています。または、ビューを非表示にして、隣接するビューを非表示のビューに拡張することも検討しています。このように、異なるセル識別子を扱う必要はありません。
Edit2:
隣接するビューのフレームを非表示にして調整するという私の代替アプローチは、私のニーズに合っていました。
ただし、上記で説明した実際の質問に対する答えを見つけたいと思っています。
// 考えられる解決策関数のパラメーターを
介してセル識別子を nib 読み込みコードに渡すことができるかどうか疑問に思っていました。これは可能ですか?これを達成するためのサンプルコードを提供できれば、それは素晴らしいことです。 options
loadNibNamed
御時間ありがとうございます。
iphone - ペン先から読み込まれたビューはタッチイベントを受信しません
ペン先からビューをロードしてメインビューに追加しようとしています。これが私のコードです。
のペン先をロードしましinitWithFrame
た@interface AddTaskView:UIView
:
その後、ビューを初期化し、メインビューに追加します。
すべて正常に動作しますが、AddTaskViewはtouchイベントを受け取りません。私には3つのボタンがあり、それらを押そうとしてもアクションを受け取りません。タイプ「AddTaskView」のペン先を作成しましたが、運がありませんでした。サブビューも調べましたが、「AddTaskView」がトップビューです。
AddTaskViewにこのコードを追加して、タッチしても応答がないかどうかを確認しました。
タッチイベントに応答する機会を得るにはどうすればよいですか?
ios - フレームの高さと幅を設定するための loadNibNamed と initWithFrame のジレンマ
.xib ファイルに関連付けられた UIView サブクラスを作成しました。この UIView サブクラスは、UIViewController で使用されます。コントローラーでは、UIView サブクラスをインスタンス化する方法が 2 つあります。
と
私は、カスタム初期化を実行できる最初のアプローチまたはその変形を好みます。唯一の問題は、既に で指定されているフレームの rect を指定する必要があることです。xib
(フレームの高さと幅を意味しますMyUIView
)。はい、もう一度ハードコーディングできますaRect
が、これは維持するのが面倒です (たとえば、.xib で UI の位置を変更するとaRect
、 も更新する必要があります)。
したがって、フレーム四角形が自動的に設定されるため、2 番目のアプローチを念頭に置く必要があります。残りの問題は、イニシャライザをカスタマイズできないことです (たとえば、初期化中に追加のパラメータを渡したいなど)。
あなたの好みは何ですか?あなたの意見では、どちらが優れていますか?
EDIT1:セルジオの答えに触発されて、私はこの回避策を思いつきました:
objective-c - アプリケーションからxibを読み込んでカスタムフレームワークのウィンドウを表示する方法
フレームワークを作成し、「MyXibFile」という名前の xib ファイルを追加しました。別のアプリケーションを作成し、このフレームワークを追加しました。.xib
このファイルを読み込んで、そこからウィンドウを表示したい。
動作していない次のコード スニペットを使用しています
コンソールに「Nib loading failed」というメッセージが表示されます。これを解決する方法はありますか?
ios - loadNibNamed:owner:optionsによって作成されたカスタムUIView:removeFromSuperviewの後にリーク
CustomView(UIViewから継承)にコンテンツを表示したいアプリケーションがあります。ただし、実行時の各時点で必要ないので、メモリの浪費を避けるために、作成および削除したいと思います。
このビューは別のnibファイルにあります。そして、viewControllerにこのコードをロードします:
myCustomViewはviewControllerのプロパティです
しかし、Instrumentsでは、#Livingが3(たとえば、上記のコードを3回呼び出した場合)、#Transitoryは1、#Overallは4であることがわかります。これは、MyCustomViewがリークすることを意味します:(設定self.myCustomView = nil
すると役に立たない:(
誰かがこのリークを解決するのを手伝ってくれませんか?ARCを使用しています。
objective-c - Xcode 4: 別のファイルのメソッドで Nib をロードする
この質問が初歩的なものでしたら申し訳ありませんが、私は過去 2 日間このバグで立ち往生しており、それを乗り越えることができませんでした。Xcode 4.3.2 を使用しています
BController.m という名前のファイルの「- (void) プロセス」というメソッドで、AController.xib という名前の nib をロードしようとしています。
明確にするために、./A/AController.xib (UIView)、./A/AController.m、./A/AController.h をディレクトリ ./B にコピーしました。
私の質問にとって重要かどうかわからないので、これについてのみ言及します。
現在、私のフローはフローとして機能します(これは私の問題である可能性があります):
- ビューに「購入」ボタンが表示される
- ユーザーは、「buyNow」という名前のIBOutletを持つ「購入」ボタンをクリックします
- 「buyNow」は「buy」を呼び出し、次に「process」を呼び出します
次に、プロセスは次の方法で nib をロードしようとします (オプション 1):
AController *何とか; for (id object in bundle){ if ([object isKindOfClass:[AController クラス]]) blah = (AController *) object; } assert(何とか != nil && "何とかゼロにすることはできません"); [self.view addSubView: 何とか];
ここで得られるエラーは、main.m の「Thread 1: signal SIGABRT」です。私も試しました (オプション 2)。
そして (オプション 3)
3 つの選択肢すべてで同じエラーが発生します。各オプションは、メソッド「プロセス」で試行されました。「プロセス」は Bm で書かれています。これを理解できるように、誰か助けてもらえますか? これらのオプションが失敗した理由に関するガイダンスは、私の理解に非常に役立ち、非常に高く評価されます。初心者を助けてくれてありがとう!
ios - NIBがロードされたビューを使用するUIView.addSubviewは、ルートUIViewのみを追加します
コンポーネントをXIBファイルで外部化したので、いくつかの異なるビューで再利用できます。次に、View Controllerで、XIBベースのUIViewをロードし、次の方法で現在のビューに追加します。
最初は、機能していないと思っていましたが、実際には機能していますが、ルートビュー(つまり、透明なすべてのグラフィカルコンポーネントのコンテナ)をビューに配置するだけです。
だから私はそれを機能させるために(すべてのサブコンポーネントに対して)この種のコードを置く必要があります:
これは非常に直感に反し、さらに、私が望むビュー階層を作成しないと思います。
XIBからカスタムテーブルヘッダーをロードするためにUITableViewControllerで同じ種類のことを行ったので、解決策があると確信しています。この状況でまったく同じXIBファイルを使用すると、すべてが正しくロードされます。コードは次のとおりです。
上記のコードでは、すべてが正常であり、テーブルセクションのヘッダーとしてビュー全体(=すべてのコンテンツを含むルートビューコンテナ)を取得しました。
したがって、問題は次のとおりです。最初の例で何が間違っているのでしょうか。すべてのコンテンツ(コンテナ+すべてのコンテンツ)を適切なUIView階層として親UIViewに追加するにはどうすればよいですか?
編集:次のように、すべてが単一のルートUIViewのXIBファイルに整理されていることを正確にする必要があります(画像を投稿できません):
ご助力ありがとうございます !
クリストフ
ios - ビューを動的にロードする
ビューを動的にロードしようとすると、奇妙な問題が発生します。
私が得るエラーは次のとおりです。
*キャッチされなかった例外'NSInternalInconsistencyException'が原因でアプリを終了します、理由:'バンドルにNIBを読み込めませんでした:'NSBundle(loaded)' with name'ItemView'' *最初のスロー呼び出しスタック:
奇妙なことに、それはランダムに発生しているように見えます-時にはそれが機能することもあれば、それが私に影響を与えることもあります。
次のようにアイテムを作成します。
コンストラクターは次のとおりです。
誰かがこれを引き起こす原因を知っていますか?
ios - iOSのloadNibNamedの混乱、ベストプラクティスは何ですか?
私は自分のUIViewサブクラスのXIBを作成するプロセスのほとんどに精通していますが、すべてが適切に機能しているわけではありません。ほとんどの場合、IBOutletsのリンクに関係しています。回り道のように見えるようにそれらを動作させることができます。
私のセットアップはこれです:
- MyClass.hとMyClass.mがあります。UIView(ビューと呼ばれる)とUILabel(myLabelと呼ばれる)のIBOutletsがあります。オンラインのいくつかの例がこれが必要であることを示唆しているように見えたので、「view」プロパティを追加しました。実際には、ビュープロパティが見つからなかったためにクラッシュする問題が解決されました。これは、UIView親クラスでもないと思います。 。
- MyClass.xibというXIBファイルがあり、そのファイルの所有者カスタムクラスはMyClassであり、そのクラスの.hと.mが存在した後に正しく事前入力されています。
私のinitメソッドは、問題が発生している場所です。
NSBundle mainBundleの「loadNibNamed」メソッドを使用して、所有者を「self」に設定しようとしました。これは、ビューのインスタンスを作成し、そのアウトレットがクラス内のアウトレットと自動的に一致することを期待しています(私は知っています)これを行う方法と私はそれに注意しています)。次に、「self」を、そのペン先のインデックス0のサブビューと等しくするのではなく、等しくしたいと思いました。
またはそのようなもの。
私はここで間違ったことをしているように感じますが、オンラインの例ではinitメソッドでも同様のことが起こっていますが、それらはそのサブビュー0をviewプロパティに割り当て、子として追加します-しかし、それは合計ではありません2つのMyClassインスタンス?loadNibNamedを介してインスタンス化された子MyClassを含む、IBOutletsに本質的にリンクされていないもの?または、せいぜい、MyClassの直接の子として最初に必要だったすべてのIBOutletsを含む追加の中間UIViewを備えたMyClassインスタンスではありませんか?これは、instanceOfMyClass.frame.size.widthのようなことを行う場合、0を返すので、導入された子UIViewが探していた実際のフレームサイズを返すので、少し厄介です。
私が間違っているのは、initメソッド内でloadNibNamedをいじっているということですか?私はもっとこのようなことをすべきですか?
またはこのように?
よろしくお願いします。