我有一个名为ObjectA的父UITableViewController对象和派生的ObjectB。
我的目标: 覆盖cellForRowAtIndexPath:方法只改变单元格外观
正确调用ObjectA方法,所以:
这就是我所做的:
/**
* ObjectA
*/
@interface ObjectA : UITableViewController
@end
@implementation ObjectA
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return list.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
/* Layout by ObjectA rules */
}
@end
/**
* ObjectB
*/
@interface ObjectB : ObjectA
@end
@implementation ObjectB
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
/* Layout by ObjectB rules */
NOT CALLED
}
@end
修改
以编程方式分配对象,因此没有与IB声明相关的问题。
EDIT2:
我的代码很糟糕......我正在测试一个测试项目并且一切正常工作 ...抱歉
/**
* ObjectA
*/
@interface ObjectA : UITableViewController {
NSArray *list;
}
-(void)setList: (NSArray *)l;
@end
@implementation ObjectA
-(void)setList: (NSArray *)l {
list = l;
[self.tableView reloadData];
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return list.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if(cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cell"];
cell.textLabel.text = [list objectAtIndex:indexPath.row];
return cell;
}
@end
/**
* ObjectB
*/
@interface ObjectB : ObjectA
@end
@implementation ObjectB
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if(cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cell"];
cell.textLabel.text = @"child";
return cell;
}
@end
/**
* View controller
*/
@interface ViewController() {
NSArray *list;
ObjectA *obj;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
list = @[@"test1", @"test2", @"test3", @"test4", @"test5"];
obj = [[ObjectB alloc] initWithStyle:UITableViewStylePlain];
obj.view.frame = self.view.frame;
[self.view addSubview:obj.view];
[obj setList:list];
}
答案 0 :(得分:0)
在对象中覆盖>
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [super numberOfSectionsInTableView:tableView];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [super tableView:tableView numberOfRowsInSection:section];
}
适合我:
ObjectB *objA = [[ObjectB alloc] init];
objA.list = @[@"1"];
[self presentViewController:objA animated:YES completion:nil];