iPhone:使用视图控制器向单独的tableviewcontroller添加项目

iPhone:使用视图控制器向单独的tableviewcontroller添加项目,iphone,uitableview,parent-child,Iphone,Uitableview,Parent Child,目前我有一个UITableViewController,它显示了该控制器实现文件中数组中的项目列表。现在,我想在右上角有一个按钮,当您按下它时,它会将您带到一个简单的页面,您可以在其中将一个项目添加到上一页的列表中。添加完项目后,它会将您带回列表,现在列表中还有一个项目 因此,我有一个navigationController导入我的tableViewController,还有一个按钮可以“推”你到添加项目页面 如何访问对tableViewController的引用,以便调用我的-(void)ad

目前我有一个
UITableViewController
,它显示了该控制器实现文件中数组中的项目列表。现在,我想在右上角有一个按钮,当您按下它时,它会将您带到一个简单的页面,您可以在其中将一个项目添加到上一页的列表中。添加完项目后,它会将您带回列表,现在列表中还有一个项目

因此,我有一个
navigationController
导入我的
tableViewController
,还有一个按钮可以“推”你到添加项目页面


如何访问对tableViewController的引用,以便调用我的
-(void)addNewItem:(NSString*)名称方法

我遇到了同样的问题,加上必须将新项目添加到本地数据库中。本例中的问题是,表视图的数据源是什么?它是coredata、SQLLite还是只是一个项目数组?我在这里找到了单例类的解决方案。不过,实现singleton类需要一些时间

如果只向表视图添加文本,可以使用alertview

例如,如果使用数组作为表的数据源,则每次按下已创建的按钮时,都可以添加一个带有警报视图的项

首先创建一个按钮使用文件所有者将您的按钮连接到.xib文件中的iAction

-


下面是我如何做到这一点的基本概述。这对我来说很有效,但我不确定这是不是最好的方式——其他人肯定会插嘴

“列表页”(您的第一个UITableViewController)实现了“添加页”调用的委托,以让“列表页”知道要添加的项的详细信息

当“列表页面”被包含上述详细信息的“添加页面”回调时,它将保存新项目,然后关闭“添加页面”

为了将这一切连接起来,当“列表页面”创建并显示“添加页面”时,它将
self
传递给“添加页面”(我称之为
delegate
)上的ivar。这基本上就是两者联系和沟通的方式

下面是我为代表定义的协议:

@protocol AddItemViewControllerDelegate
- (void)addItemViewController:(AddItemViewController *)controller 
             withNewEventName:(NSString *)eventName;
@end
以下是“列表页面”按钮单击处理程序:

- (IBAction)addItem
{
    AddItemViewController *controller = [[AddItemViewController alloc] initWithNibName:@"AddItemView" bundle:nil];
    controller.delegate = self;
    [self presentModalViewController:controller animated:YES];
    [controller release];
}
以下是“添加页面”中的提交代码:

最后,这里是“列表页”中委托协议的实现:


伟大的谢谢你的帮助,这正是我要找的。很乐意帮忙。如果这解决了您的问题,请将其标记为答案。在尝试实现这一点时,我遇到了一些概念问题。协议是否写在“列表”或“添加”页面?列表页面是实现协议的页面。当您创建并显示“添加页面”时,您将传递对“self”的引用,以便可以通过协议实现回调到“list page”实例中。很抱歉,我只是带着一部手机和一个糟糕的网络连接在巡航中。没问题,谢谢你的帮助。我仍然有麻烦。。。当我使用[self-presentModalViewController:controller]方法时,我得到一个错误,上面写着:NSInternalInconsistencyException',原因:'无法在bundle中加载NIB:'NSBundle'。知道这是什么吗?谢谢!我将在表中存储项目,因此alertview不适合,但我将查看该教程。
- (IBAction)addItem
{
    AddItemViewController *controller = [[AddItemViewController alloc] initWithNibName:@"AddItemView" bundle:nil];
    controller.delegate = self;
    [self presentModalViewController:controller animated:YES];
    [controller release];
}
if ([self.delegate respondsToSelector:@selector(addItemViewController:withNewEventName:)]) {
    [self.delegate addItemViewController:self withNewEventName:eventNameTextField.text];
}
- (void)addItemViewController:(AddItemViewController *)controller 
             withNewEventName:(NSString *)eventName 
{
    EventModel *newEvent = [[EventModel alloc] init];
    newEvent.name = eventName;
    [eventsList addObject:newEvent];
    [newEvent release];
    [self saveEvents];
    [self dismissModalViewControllerAnimated:YES];
}