我有两个表视图,一个名为mainTableViewController(mtvc),另一个名为detailTableViewController(dtvc)。这是非常典型的点击主tableview单元格上的附件按钮带你到详细的tableview有点事。
在prepareForSegue方法中,从主tableview传递到detail tableview的数据是一个名为item的NSMutableArray。
这就是我显示的方式:cell.detailTextLabel.text = self.item [indexPath.row];
很酷的是我设法在详细信息表视图单元格上进行就地编辑(覆盖了NSTableViewCell,将UITextField添加为每个单元格的子视图)。
一切正常,我花了一整天最后一件事无法弄清楚如何在就地编辑后更新NSMutableArray项目,最终目标是就地编辑,主表视图数据应反映变化我尝试使用委托和协议但它不起作用(就地编辑的内容没有被传回,部分原因是我不知道如何捕获已编辑的内容,它不喜欢它是一个带有名称的文本字段,我不能只使用updatedContent = self.myTextField.text来获取更改)
我的想法已经用完,任何帮助都会受到高度赞赏,谢谢。
这是主tableview控制器中的prepareForSegue
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"toInventoryDetail"]) {
NSMutableArray *selectedItem = nil;
if (self.searchDisplayController.active) {
selectedItem = _searchResults[[sender row]];
} else {
selectedItem = _appDelegate.items[[sender row]];
}
UPFInventoryDetailTableViewController *idtvc = segue.destinationViewController;
idtvc.item = selectedItem;
}
}
这里是详细tableview控制器的cellForRowAtIndex
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UPFEditableUITableViewCell *cell = [[UPFEditableUITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier];
cell.textLabel.text = _appDelegate.title[indexPath.row];
cell.detailTextLabel.text = self.item[indexPath.row];
[cell showEditingField:YES];
return cell;
}
我写了代表团,但是因为他们没有工作而删除它们。
我有一个想法,显然仍然使用授权和协议:当完成'在详细的tableview命中按钮,我去抓取所有行内容并构建一个新数组,使用委托将这个新数组传递回主tableview控制器,将这个新数组添加到模型中,同时删除旧数组。棘手的问题仍然是我如何在详细的表格视图中获取所有内容?
更新: 哈哈!我认为解决了一半的难题!
这里是详细的tableview控制器
的解决方案 - (IBAction)doneUpdate:(UIBarButtonItem *)sender {
[self.delegate addItem:[self newItem]];
}
- (NSMutableArray *)saveItem
{
NSMutableArray *newItem = [[NSMutableArray alloc] init];
NSArray *indexPathes = [self.tableView indexPathsForVisibleRows];
for (NSIndexPath *indexPath in indexPathes) {
UPFEditableUITableViewCell *cell = (UPFEditableUITableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath];
[newItem addObject:cell.editField.text];
}
return newItem;
}
这里是主要的tableview控制器
- (void)addItem:(NSArray *)item
{
//take the updated item then insert the items array as new item
[_appDelegate.items addObject:item];
//remove the selected item (the one being updated) from the items array
[_appDelegate.items removeObject:_appDelegate.selectedItem];
[self.tableView reloadData];
[self.navigationController popViewControllerAnimated:YES];
}
答案 0 :(得分:1)
创建单元格时 - 为您的 UITextFields
添加标签
您可以收集其委托方法输入的数据 - 您可以制作NSDictionary
/键值对,也可以将其添加到NSArray
。
- (void)textFieldDidEndEditing:(UITextField *)textField {
if(textField.tag == 11) {
// you can add it to your desired array/dictionary
}
}
OR
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
if(textField.tag == 11) {
// you can add it to your desired array/dictionary
}
}
您可以使用Delegation/Protocol
或将此值存储在NSUserDefault
中,然后将其恢复到mainViewController上。
答案 1 :(得分:0)
您的selectedItem
是否有单独的数据模型类(类)?这将是在两个TableViewControllers之间保持数据的适当方式。它可以是Core Data,也可以是生活在内存中的NSMutableArray。 DetailViewController更新item
并保存更改,然后mainTableViewController重新加载TableView(甚至只是支持先前编辑的单元格的数据。)
甚至可以考虑由pattern推广的模型 - 视图 - 控制器 - 商店BigNerdRanch。