ウィジェット (UIViewController サブクラス) のコンテナーとして機能する UIView があります。シンプルな UIButtons を UIView コンテナーに追加して、ドラッグ アンド ドロップ機能を動作させることができましたが、UIView コンテナーに追加されたウィジェットから UIButton をドラッグ アンド ドロップしようとすると、問題が発生します。ボタンを操作しようとしても、デフォルトのタッチ動作以外は何も起こりません。
このシナリオでデリゲートを使用して、UIView コンテナーがドラッグ/ドロップを処理するものになることをウィジェットのボタンに伝える必要がありますか?
次のように、コンテナーの ViewController にウィジェットを追加しています。
// Widget is a UIViewController subclass, WidgetTestViewController is a Widget subclass
Widget *testWidget = [[WidgetTestViewController alloc] initWithNibName:@"WidgetTest" bundle:nil];
[testWidget.widgetButton addTarget:self action:@selector(widgetDrag:forEvent:) forControlEvents:UIControlEventTouchDragInside];
[containerView addSubview:testWidget.view];
testWidget.view.frame = frame;
この関数を使用して、コンテナーの ViewController でドラッグを処理しています。
- (IBAction)widgetDrag:(id)sender forEvent:(UIEvent *)event {
CGPoint point = [[[event allTouches] anyObject] locationInView:containerView];
UIControl *control = sender;
control.center = point;
}