从主ViewController中分离UITableView的委托/数据源

Lit*_*ome 5 iphone cocoa-touch objective-c uitableview

我对iOS开发很新.我已经阅读了关于ViewControllers变大的问题,并且想要遵循我在上一个问题UITableView问题的答案中看到的设计,我为我的应用程序使用单独的委托/ dataSource时,它在一个屏幕上有2个不同的表和几个按钮.但不知何故,我在故事板连接TestTableViewController和TestTableTestViewController 之间产生了混淆.

任何人都可以提供一个示例工作项目或一些关于如何将UITableView委托,数据源和连接插座连接到故事板中的单独自定义UIViewController子类(TestTableTestViewController)的屏幕截图吗?

此外,此设计是否适用于xCode 5/iOS 7及更高版本?

注:对于那些已经转移到斯威夫特我强烈建议使用迅速扩展的委托和数据源和事实上任何其他实现继承的类或协议为每娜塔莎机器人的博客文章的"分组"部分的位置

iBu*_*Bug 2

您必须创建另一个名为 as 的类MyTableViewDataSourceTabbleViewDataSource在其中实现方法。创建数据源类的属性。设置数据源ViewController 示例如下:

@interface MyTableViewDataSource ()
@property (nonatomic, assign) int sectionOneRows;
@property (weak) id<YourDelegate> delegate;
@property (nonatomic, strong) NSArray *dataSourceArray;
@end

@implementation MyTableViewDataSource
@synthesize delegate=_delegate;

-(id) initDataSourceWithdArray:(NSArray *)array
                                            delegate:(id)delegate
{
    if (self = [super init]) {
        self.dataSourceArray=array;
        self.delegate = delegate;
    }
    return self;
}

#pragma mark - UITableViewDataSource

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return numberOfRows;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cellToReturn = nil;
    //Your code here
    return cellToReturn
}

#pragma mark - UITableView Delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    //Your logic here
    //implement the delegate method in you ViewController
        [self.delegate performSelector:@selector(loadDetailsAtIndexPath:)withObject:indexPath];
    }
}
Run Code Online (Sandbox Code Playgroud)

在你的ViewController

self.myDataSource = [[MyTableViewDataSource alloc] initDataSourceWithdArray:self.dataArray delegate:self];
[self.myTableView setDataSource:self.myDataSource];
[self.myTableView setDelegate:self.myDataSource];
[self.myTableView reloadData];
Run Code Online (Sandbox Code Playgroud)

您的委托方法:

-(void)loadDetailsAtIndexPath:(NSIndexPath *)indexPath
{
    MyDetailViewController *myDetailController = [[MyDetailViewController alloc] initWithNibName:@"MyDetailViewController" bundle:nil];
    //Your logic here
    [self.navigationController pushViewController:myDetailController animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

转到连接检查器并进行如下更改:

在此输入图像描述

的数据源tableView将在此处以编程方式设置,而不是在 IB 中。我希望这能帮到您。