在Xcode中,使用基于视图的应用程序模板(仅限iPhone)启动一个新项目。
在带有Interface Builder的视图(ProjectNameViewController.xib)的xib中,添加一个TableView。
创建一个新的UITableView的Objective-C类子类,在头文件中添加UITableViewDataSource协议并添加此属性:
NSArray *data;
在实现文件中实现2个必需的方法:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [data count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString* identifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
cell.textLabel.text = [data objectAtIndex:indexPath.row];
return cell;
}
在init方法中添加:
data = [[NSArray arrayWithObjects:@"First", @"Second", @"Third", nil] retain];
返回Interface Builder,使用上一个自定义类(Identity检查器)添加一个新对象。 在UITableView中(在Connections检查器的Interface Builder中)将插座dataSource添加到上一个对象。
运行应用程序,它会显示包含数据的表格,然后当您向上滚动时,它会在主线程上发出信号:“EXC_BAD_ACCESS”(没有异常抛出)。
我对使用Cocoa Framework的Xcode + Interface Builder几乎不熟悉,我正在尝试了解Movel-View-Controller以创建具有可重用代码的应用程序,但我无法理解如何为make分割对象应用程序中每个UI元素的控制器,因为在这种情况下,如果我将方法放在由文件所有者子类分类的类中(协议与上面的类相同),它都可以工作。 但File的Owner的类是ViewController,我希望TableView与应用程序中的任何其他对象分开。如果这不是构建应用程序的方式(推荐方式),请告诉我。
提前致谢。
答案 0 :(得分:3)
问题解决了。
在ViewController中添加2个IBOutlet:
一个用于UITableView,一个用于TableViewController(示例):
@interface ViewBasedAppViewController : UIViewController {
IBOutlet UITableView *table;
IBOutlet TableViewController *tableController;
}
TableViewController是一个NSObject。 在Interface Builder中连接插座: 从文件的所有者到表格选择“表格”; 从File的所有者到TableViewController对象选择“tableController”;