我有两个UITableview。第一个显示3个部分,每个部分有3行,这是默认布局。当用户按第2行第0部分时,显示第二个视图以选择值。选择值后,它将返回第一个视图,但这次使用不同的布局。根据所选的值,第一个视图只能显示一个,两个或三个部分。我正在尝试实现此行为将indexpath从子视图传递到其父视图并动态更改节的数量。我得到了子视图中选择的行数,但是一旦传递给父视图,行号就变为零。
子视图的代码是:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
NSUInteger row = indexPath.row;
//Create parent view instance to pass back indexpath as a integer
DiarioA *plc = [[DiarioA alloc] init];
NSInteger i1 = row;
plc.rowTipo = i1;
[plc release];
[self.navigationController popViewControllerAnimated:YES];
}
Pa
视图(DiarioA.h)
@property (nonatomic, assign) int rowTipo;
PArent观点(Diario.m)
@synthesize rowTipo;
- (void)viewWillAppear:(BOOL)animated{
[self.tableView reloadData];
//Check if rowTipo has value
NSLog(@"RowTipo: %d",rowTipo);
}
//Use rowTipo to dynamically adjust uitableview layout.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
if (self.rowTipo==0) {
return 3;
}
return self.rowTipo;
}
你能帮我辨别一下我为什么要丢失从子视图到父视图的索引路径。非常感谢您的帮助。
答案 0 :(得分:3)
DiarioA *plc = [[DiarioA alloc] init];
您在此处创建新对象并设置plc.rowTipo = i1;
更改此对象的值而不是父对象。
您将父对象传递给子控制器,然后像这样更改其值。
// child .h file
DiarioA *plc;
@property (nonatomic, assign) DiarioA *plc;
//child .m file
@synthesize plc;
// code when you push your child controller
ChildController *controller = [[ChildController allo] initWithNibName.....];
controller.plc = self
和
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
NSUInteger row = indexPath.row;
plc.rowTipo = row;
[self.navigationController popViewControllerAnimated:YES];
}
答案 1 :(得分:2)
我认为您应该制作子视图控制器的协议并使您的父视图控制器成为其委托。在初始化子视图控制器之后,只需设置委托属性,然后调用委托方法在那里发送索引路径。