私はUIImagePickerControllerのインスタンスを含むUIViewControllerサブクラスを持っています。このコントローラをCameraControllerと呼ぶことにしましょう。とりわけ、CameraControllerは、UIImagePickerControllerインスタンスのoverlayView、およびUIImagePickerController(このインスタンスをphotoPickerインスタンスと呼ぶ)がモーダルコントローラとして表示されるときに表示されるその他のビュー、ボタン、ラベルなどを管理します。UIViewControllerとUIImagePickerController:期待どおりにビューを作成および管理できません
CameraPickerのカメラオーバーレイとCameraControllerビュー階層の一部であるelemetsが期待どおりに表示され、機能します。私が抱えている問題は、UIViewControllerのデフォルトイニシャライザを使用してCameraControllerのビューの階層を作成できないということです。
別のUIViewControllerからCameraControllerを初期化しています。このコントローラをWebViewControllerと呼ぶことにしましょう。ユーザーがWebViewControllerによって管理されるビューのボタンをクリックすると、launchCameraメソッドが呼び出されます。バンドル:
- (void) launchCamera{
if (!cameraController) {
cameraController = [[CameraController alloc] init];
// cameraController = [[CameraController alloc] initWithNibName:@"CameraController"
// bundle:[NSBundle mainBundle]];
cameraController.delegate = self;
}
[self presentModalViewController:cameraController.photoPicker animated:NO];
}
は私がinitWithNibName呼び出すことによってCameraControllerを作成できるようにしたい:それは現在このように見えますが、私は説明しようとして、それは を働いていません。
CameraControllerのinitメソッドは次のようになります。
- (id) init {
if (self == [super init]) {
// Create and configure the image picker here...
// Load the UI elements for the camera overlay.
nibContents = [[NSBundle mainBundle] loadNibNamed:@"CameraController" owner:self options:nil];
[nibContents retain];
photoPicker.cameraOverlayView = overlay;
// More initialization code here...
}
return self;
}
私は要素がCameraController.xibファイルから読み込むために得ることができる唯一の方法はloadNibNamed呼び出すことです:所有者:オプションを:.それ以外の場合は、カメラが引き継がれますが、オーバーレイやその他のビューコンポーネントは表示されません。この問題の副作用は、viewDidLoad、viewDidAppearなどのCameraControllerのビュー管理メソッドのどれも呼び出されていないことです。
ただし、ペン先に定義されているすべてのアウトレットが動作しているようです。例えば、カメラがロードされると、ユーザにいくつかの指示が表示されます。このビューには、それを閉じるボタンがあります。このボタンはCameraControllerで宣言され、呼び出されたメソッドはこの命令ビューを閉じます。それはすべてペン先を介して一緒に配線され、素晴らしい作品です。さらに、写真を撮るボタンは、サーバーがphotoPickerのオーバーレイとして見ることができます。このボタンと、押されたときに呼び出されるメソッドは、CameraControllerによって管理され、すべてがペン先に表示されます。それはあまりにもうまくいく。
私は何が欠けていますか?なぜUIViewControllerのデフォルト初期化子を使用してCameraControllerインスタンスを作成できないのですか?そして、CameraControllerのビュー管理メソッドのどれも今まで呼ばれていません。
ありがとうございました。
を? – Oliver
@Oliver - オーバーレイはUIViewのインスタンスであり、CameraControllerのメンバです。これはIBOutletとしてマークされています。 – richever