6

我无法将情节提要中表格视图的数据源和委托出口连接到我的自定义委托类。我想将这些表函数委托给另一个类。关于委托、出口和故事板中的连接,我从根本上误解了一些东西。

背景

我有一个UIViewController包含 aUIPickerView和其他内容的视图 a UITableView
我已经到了 my 太大的地步,我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它将使我能够连接到我的委托类。它没有。

然后我尝试在情节提要中创建一个对象,并为其赋予 class 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;
}
  • 我是否需要使我的对象成为单例并仍然在委托中对其进行初始化?
  • 我需要在代码中而不是在情节提要中进行此设置吗?
  • 在情节提要中创建对象是错误的想法吗?

我觉得我很接近,但我觉得我做的太多了。

4

1 回答 1

1

如果您想访问ExerciseTableDelegate您在应用程序委托中设置的实例,那么您必须在代码中将其连接到您的表格视图,因为它无法从情节提要中访问 - 正如您所发现的那样,添加一个故事板中的新对象会创建一个新实例。

幸运的是,这很容易实现。在viewDidLoad表视图控制器的方法中,添加以下内容:

self.tableView.delegate = self.tableDelegate;
self.tableView.datasource = self.tableDelegate;

这将重新指向数据源并委托给您的单独对象。

于 2012-06-24T08:56:41.143 回答