我对iOS开发很陌生。我已经阅读了ViewControllers
变得庞大的问题,并希望遵循我在上一个问题UITableView issue when using separate delegate/dataSource的答案中看到的设计,我的应用程序有两个不同的表和一对按钮屏幕。但不知怎的,我在TestTableViewController
和TestTableTestViewController之间的故事板连接中感到困惑。
任何人都可以提供示例工作项目或一些屏幕截图,介绍如何将UITableView
委托,数据源和连接插座连接到故事板中的单独自定义UIViewController
子类(TestTableTestViewController
)请?
此外,此设计是否适用于xCode 5 / iOS 7及更高版本?
注意:对于那些搬到Swift的人,我强烈建议使用swift扩展名代表&数据源,实际上是按照“分组”的方式继承的类或协议的任何其他实现。 Natasha The Robot的博客文章here
答案 0 :(得分:2)
按住Ctrl
和click + hold + drag
项目,将其设置为.h文件。它会自己连接你只需要命名它们。
See This Video Tutorial
另请查看这些教程
答案 1 :(得分:2)
您必须创建另一个名为MyTableViewDataSource
的类,并在其中实现TabbleViewDataSource
方法。创建数据源类的属性。在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];
}
}
在ViewController
:
self.myDataSource = [[MyTableViewDataSource alloc] initDataSourceWithdArray:self.dataArray delegate:self];
[self.myTableView setDataSource:self.myDataSource];
[self.myTableView setDelegate:self.myDataSource];
[self.myTableView reloadData];
您的委托方法:
-(void)loadDetailsAtIndexPath:(NSIndexPath *)indexPath
{
MyDetailViewController *myDetailController = [[MyDetailViewController alloc] initWithNibName:@"MyDetailViewController" bundle:nil];
//Your logic here
[self.navigationController pushViewController:myDetailController animated:YES];
}
转到Connections Inspector并进行如下更改:
tableView
的数据源将在此处以编程方式设置,而不是在IB中。
我希望这能帮到您。