編集#1
質問の下部にある編集 #1 をお読みください。カスタム ビューの作成に nib を使用できるすべての方法を理解しようとしているので、すべての例で nib ファイルを扱います。
終わり
コントローラーでペン先を使用するカスタム ビューを作成するためのすべての手法を理解しようとしています。この質問の一番下に方法をリストしました。
これが私の TRtestview のコードです (この設定方法の 1 つの意味は、initWithCoder が常に呼び出されることです)。
// TRtestview.m
-(id)initWithCoder:(NSCoder *)aDecoder{
self=[super initWithCoder:aDecoder];
if (self) {
if (self.subviews.count == 0) {
UIView *myView=[[[NSBundle mainBundle] loadNibNamed:@"testview" owner:nil options:nil] lastObject];
myView.userInteractionEnabled=YES; // doesn't do anything
[self addSubview:myView];
}
}
NSLog(@"about to return here in initWithCoder");
return self;
}
編集 1
-(void)setup
{
UIView *myView=[[[NSBundle mainBundle] loadNibNamed:@"testview" owner:nil options:nil] lastObject];
[self addSubview:myView];
}
- (id)initWithFrame:(CGRect)frame
{
NSLog(@"at top of initWithFrame");
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
TRViewController.m で、thisView を userInteractionEnabled に設定しようとしましたが、状況は変わりませんでした。
- (void)viewDidLoad
{
[super viewDidLoad];
self.thisView.userInteractionEnabled=YES;
これは、initWithFrame (手法 1) と loadNibNamed (手法 2) を呼び出すシナリオで機能しました。ビューをオブジェクト インスペクタからドラッグしてロードし、カスタム クラス属性インスペクタでクラスを設定します (手法 #3)。ただし、ボタンは機能しないため、この方法は機能しません。
テクニック 3 を使用して nib を使用してカスタム ビューを作成し、ユーザーの操作を許可するにはどうすればよいですか?
どうも
編集 1
カスタム ビューを作成してインスタンス化する方法をすべて理解したいと思います。理想的には、initWithFrame、loadNibNamed、またはオブジェクト ライブラリからドラッグして作成できるカスタム ビューを使用できるようにしたいと考えています。
シナリオは次のようです。
- ViewController からの initWithFrame; ペン先で使用する場合、initWithFrame で loadNibNamed を呼び出します - 再帰的な読み込みを防ぐ必要があります
- ViewController (initWithCoder を呼び出す) から loadNibNamed を取得し、一度だけロードしたい
- UIView のインスタンスをドラッグし、カスタム クラスをカスタム UIView (この場合は TRtestview) に設定します。これは initWithCoder を呼び出します。