ストーリーボード内のテーブルビューのデータソースとデリゲートアウトレットをカスタムデリゲートクラスに接続できません。それらのテーブル関数を別のクラスに委任したいと思います。ストーリーボードでの委任、アウトレット、配線に関して、私が根本的に誤解していることがあります。
バックグラウンド
私は、とりわけ、UIViewController
を含むビューを持つを持っています。
大きすぎるところまで来たので、テーブル関連の関数を別のクラスに移動したいと思います。UIPickerView
UITableView
UIViewController
次のクラスを作成して、などのテーブルメソッドを含めましたnumberOfSectionsInTableView:
。
@interface ExerciseTableDelegate : NSObject <UITableViewDelegate, UITableViewDataSource>
@property (strong, nonatomic) ExerciseDataController *dataController;
@end
上記のクラスへの参照を自分の中に置くことを考えましたUIViewController
@interface ExerciseViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>
{
UIPickerView *exercisePicker;
}
@property (strong, nonatomic) IBOutlet ExerciseTableDelegate *tableDelegate;
@end
ストーリーボード内で、テーブルビューのデータソースまたはデリゲートアウトレットの1つをドラッグUITableViewController
すると、デリゲートされたクラスに接続できるようになることを期待していました。そうではありませんでした。
次に、ストーリーボード内にオブジェクトを作成して、クラスを与えようとしましたExerciseTableDelegate
。次に、テーブルビューデリゲートをオブジェクトにドラッグできますが、これは、内で設定したオブジェクトと同じではありませんAppDelegate
。
私のアプリデリゲート
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
ExerciseViewController *rootViewController = (ExerciseViewController *)[[navigationController viewControllers] objectAtIndex:0];
ExerciseTableDelegate *tableDelegate = [[ExerciseTableDelegate alloc]init];
ExerciseDataController *dataController = [[ExerciseDataController alloc] init];
tableDelegate.dataController = dataController;
rootViewController.tableDelegate = tableDelegate;
// Override point for customization after application launch.
return YES;
}
- オブジェクトをシングルトンにして、デリゲートで初期化する必要がありますか?
- ストーリーボードではなくコードでこの設定を行う必要がありますか?
- ストーリーボードにオブジェクトを作成するのは間違った考えですか?
身近に感じますが、やりすぎだと思います。