我有两个UITableViewController类,MainTableController和SubTableController。
从AppDelegate类我调用MainTableController类。
首先这个类是空的,并且在这个类中有一个名为“show list”的按钮。 当我点击这个按钮时,我将转到SubTableController,在那里我有一个表格形式的动作列表 现在,如果我选择第一个单元格动作,那么该动作名称必须出现在MainTableController中我的第一个表格单元格中。但是我无法在MainTableController类的表中打印该名称。
在SubTableController中:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
ActionList * actionListObj = [appDelegate.actionArray objectAtIndex:indexPath.row];
self.chooseActions = actionListObj.actionName;
MainTableController * mainViewController = [[MainTableController alloc] init];
[mainViewController getAction:self.chooseActions];
[self.navigationController dismissModalViewControllerAnimated:YES];
}
在MainTableController中:
-(void) viewWillAppear:(BOOL)animated{
[self reloadData];
}
-(void) reloadData{
[self.myTableView reloadData];
}
-(void) getAction: (NSString *) actionChoose{
self.action = actionChoose;
[self reloadData];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell...
cell.textLabel.text = self.action;
return cell;
}
当我调试时,在MainTableController中我得到了getAction方法中的动作,但是在表格单元格中,文本字符串为空。
有人可以帮我解决这个问题吗?我哪里错了?
答案 0 :(得分:1)
每次在SubTableController
中选择单元格时,您都在分配和初始化新视图控制器。
MainTableController * mainViewController = [[MainTableController alloc] init];
当然,它不是导航堆栈中的那个。
你需要让这两个控制器进行通信 我建议子视图控制器在主视图上定义一个属性,以便在需要时发送消息。
在SubTableController
中,添加一个属性并合成它:
@property(readwrite, assign) MainViewController *mainViewController;
// and ...
@synthesize mainViewController;
当然,当你按下子视图控制器时,不要忘记设置属性。
// in main view controller
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// alloc/init the sub VC
subVCInstance.mainViewController = self;
[self pushViewController:subVCInstance ......
现在,当在sub 1中选择一行时,向主要消息发送消息,而不使用alloc / init新的MainViewController
对象:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
ActionList * actionListObj = [appDelegate.actionArray objectAtIndex:indexPath.row];
self.chooseActions = actionListObj.actionName;
//MainTableController * mainViewController = [[MainTableController alloc] init];
[self.mainViewController getAction:self.chooseActions];
[self.navigationController dismissModalViewControllerAnimated:YES];
}
这应该可以正常工作。
答案 1 :(得分:1)
在didSelectRowAtIndexPath
课程的SubTableController
中,您正在分配新的MainTableController
来发送数据。
MainTableController * mainViewController = [[MainTableController alloc] init];
[mainViewController getAction:self.chooseActions];
你不应该这样做。因为现有的主视图将与新分配的主视图不同。您应该使用delegate
来回馈数据。有关协议和代理的更多信息,see here