我无法连接数据源并将故事板中的表视图的出口委托给我的自定义委托类。我想将这些表函数委托给另一个类。在故事板中,我从根本上误解了有关授权,出口和布线的事情。
背景
我的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
我希望在故事板中,当我将表格视图中的一个数据源或委托出口拖到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;
}
我觉得我很亲密,但我觉得我做得太多了。
答案 0 :(得分:1)
如果要访问在应用程序委托中设置的ExerciseTableDelegate
实例,则必须将其连接到代码中的表视图,因为无法从故事板访问它 - 如您所见,在故事板中添加新对象会创建一个新实例。
幸运的是,这很容易实现。在表视图控制器的viewDidLoad
方法中,添加以下内容:
self.tableView.delegate = self.tableDelegate;
self.tableView.datasource = self.tableDelegate;
这将重新指向数据源并委托给您的单独对象。