問題タブ [initwithframe]
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.
objective-c - Objective C-カスタムビューとinitメソッドの実装?
in-code
との両方を初期化できるようにしたいカスタムビューがありますnib
。
initWithFrame
とメソッドの両方を書く正しい方法は何initWithCoder
ですか?これらは両方とも、初期化に使用されるコードのブロックを共有します。
ios - フレームの高さと幅を設定するための loadNibNamed と initWithFrame のジレンマ
.xib ファイルに関連付けられた UIView サブクラスを作成しました。この UIView サブクラスは、UIViewController で使用されます。コントローラーでは、UIView サブクラスをインスタンス化する方法が 2 つあります。
と
私は、カスタム初期化を実行できる最初のアプローチまたはその変形を好みます。唯一の問題は、既に で指定されているフレームの rect を指定する必要があることです。xib
(フレームの高さと幅を意味しますMyUIView
)。はい、もう一度ハードコーディングできますaRect
が、これは維持するのが面倒です (たとえば、.xib で UI の位置を変更するとaRect
、 も更新する必要があります)。
したがって、フレーム四角形が自動的に設定されるため、2 番目のアプローチを念頭に置く必要があります。残りの問題は、イニシャライザをカスタマイズできないことです (たとえば、初期化中に追加のパラメータを渡したいなど)。
あなたの好みは何ですか?あなたの意見では、どちらが優れていますか?
EDIT1:セルジオの答えに触発されて、私はこの回避策を思いつきました:
objective-c - インスタンス変数がinitWithFrameによって上書きされずにNSViewを保存する方法:?
ココア初心者です。NSView 内のインスタンス変数をエンコードしてファイルに保存しようとしていました。しかし、エンコードするたびに、initWithFrame: が呼び出されたときに (null) に上書きされます。この動作をスキップして、アーカイブされていない NSView にインスタンス変数をロードする方法はありますか? これが私が持っているコードです:
上記のコードでは、最初に塗りつぶす色を緑に設定し、drawRect: メソッドが終了した直後に黄色に変更したため、保存される色は黄色になります。それでも、initWithFrame: ログ コメントで null に戻り、再びグリーン スクリーンが表示されます。見た目から、ビューからデータを分離する唯一の方法のようです。しかし、もっと簡単な方法があれば、誰でも私を助けることができますか?
ios - initWithFrame には空のフレームが与えられます
UINavigationBar のカスタム サブクラスを利用する UINavigationController を使用しようとしています。ただし、initWithFrame で問題が発生しています。initWithFrame が呼び出されると、寸法が出力され、幅 0.0 と高さ 0.0 が表示されます。しかし、 UINavigationBar サブクラス内の -(void) layoutSubviews で同じフレームを印刷すると、フレームは正しく設定されます。initWithFrame がゼロ サイズのフレームを受け取るのはなぜですか? これを修正するにはどうすればよいですか? UINavigationController がそれを処理する必要があるため、手動で initWithFrame などを呼び出すのは正しくないように思えます。関連するコードは次のとおりです。
AppDelegate.m
CustomNavigationBar.m
ありがとうございました!
ios - サブレイヤーは、initWithCoder ではなく、initWithFrame で作成された場合にのみ描画します
サブレイヤー (CAShapeLayer) とサブビュー (UILabel) を持つカスタム ビューがあります。でレイヤーを作成しinitWithCoder
て背景色を設定すると、常に黒く表示されます。ただし、コードを に移動するinitWithFrame
と、色が正常に表示されます。
でサブレイヤーを作成することは想定されていませんinitWithCoder
か?
コードを機能させる唯一の方法は次のとおりです。
更新:
drawRect
塗りつぶしの色を間違って設定していたことが判明しました。colorLayer.fillColor = myColor.CGColor
その代わりに使うべきだっ[myColor setFill]
た[path fill]
ios - initWithImage は正常に動作します initWithFrame が複数回呼び出されています
数字で単純なカラー タイルを生成するために、UIImageView
またはのいずれかをサブクラス化しています。UIView
を使用している場合はUIImageView
、メソッドを使用しますinitWithImage
。を使用する場合UIView
、メソッドinitWithFrame
が使用されています。赤い正方形のイメージまたはプログラムで生成された赤いビューのいずれかが初期化に使用されます。
問題は 2 つのスクリーンショットで見ることができます:initWithImage
が使用されている場合 - すべて正常に動作します。メソッドが使用されている場合initWithFrame
、通常のビューで偶数の順序で作成された情報なしで、複数の白いビューで終了しています。すべてのスクリーンショットとコードが添付されています。
を使用して初期化すると、次のようになりますinitWithImage
。
そして、これはそれがどのように見えるかinitWithFrame
です:
そして、別のクラス (UIScrollView サブクラス) からこれらの初期化子を呼び出す for ループ。ビューが初期化された後にラベル値が設定されています。
グーグルは、これは非常に一般的な問題であるという印象を与えましたが、これを解決する方法は見つかりませんでした. さらに、数字が完全に正しい順序になっている理由はまだわかりません。唯一の問題はビューの位置です。
ios - initWithFrame と loadNibNamed が連携していませんか?
https://github.com/romaonthego/REPagedScrollViewで説明されているように、UIPageControl が埋め込まれた Paged UIScrollView を使用しています。
私が使用すると、コードは正常に動作します
しかし、私のプロジェクトには nib ファイルを使用する必要があります。私はそれを次のように呼んでいます:
これはほとんど問題なく動作します。ビューを呼び出すことができます。唯一の問題は、ビューが initWithFrame:CGRectMake をリッスンせず、フルスクリーンで読み込まれ、ナビゲートするページ コントロールが表示されないことです。
自動レイアウトはオフに設定されています。
ここで私が間違っている場所を誰かに教えてもらえますか? この問題を解決するために何ができますか?
敬具、デビッド
macos - Cocoa: カスタム ビュー プロキシからの initWithFrame が呼び出されていません
Apple のドキュメントカスタム ビューの作成によると、Interface Builder でカスタム ビュー プロキシを使用している場合は、このメソッドを呼び出す必要があります。
カスタム ビュー用の Interface Builder パレットを作成していない場合、Interface Builder 内でサブクラスのインスタンスを作成するために使用できる 2 つの手法があります。1 つ目は、Interface Builder コンテナー パレットでカスタム ビュー プロキシ アイテムを使用することです。このビューはカスタム ビューの代役であり、他のビューに対してビューの位置とサイズを変更できます。次に、インスペクターを使用して、ビューが表す NSView のサブクラスを指定します。nib ファイルがアプリケーションによってロードされると、カスタム ビュー プロキシは指定されたビュー サブクラスの新しいインスタンスを作成し、initWithFrame: メソッドを使用してそれを初期化し、必要に応じて自動サイズ変更フラグを渡します。その後、ビュー インスタンスは awakeFromNib メッセージを受け取ります。
残念ながら、私の場合は呼び出されていません。誰かがこの問題に対処しなければなりませんでしたか?
ios - `[UIView initWithFrame:]` の矛盾するドキュメント: nullable または nonnull?
CLANG_ANALYZER_NONNULL
(つまり-Xclang nullability
)を使用すると、「 null 以外の値を返すことが期待される関数から Null が返されます」という結果が得られました。
Xcode 7.3 および iOS 9.3 のドキュメントを使用して確認initWithFrame:
したところ、次のものが返されnil
ます。
しかし、UIView.h はすべてをNS_ASSUME_NONNULL_BEGIN
でカプセル化するため、次のように解釈できます。
なので:
したがって、ドキュメントではそれが であると説明されていnullable
ますが、ヘッダー ファイルでは であると説明されていますnonnull
。どちらを信頼しますか?
私は書くべきですか:
または:
アップデート
Xcode のドキュメントが更新され、次のようになりました。
したがって、これ以上の競合はありません。