UITableView数据源和委托将不会连接到自定义类

时间:2012-06-23 15:38:25

标签: objective-c ios uitableview uistoryboard

我无法连接数据源并将故事板中的表视图的出口委托给我的自定义委托类。我想将这些表函数委托给另一个类。在故事板中,我从根本上误解了有关授权,出口和布线的事情。

背景

我的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;
}
  • 我是否需要让我的对象成为单例,并且仍然将其初始化 代表?
  • 我是否需要在代码而不是代码中进行此设置 故事情节?
  • 在故事板中创建一个错误的想法吗?

我觉得我很亲密,但我觉得我做得太多了。

1 个答案:

答案 0 :(得分:1)

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

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

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

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