0

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

所以,我有一个navigationController进入我tableViewController的按钮和一个按钮,可以将你“推”到添加项目页面。

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

4

2 回答 2

1

这是我如何做到这一点的基本概述。它对我有用,但我不确定这是最好的方法——其他人肯定会加入。

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

当“列表页面”被带有所述详细信息的“添加页面”回调时,它会保存新项目,然后关闭“添加页面”。

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

这是我为委托定义的协议:

@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];
}

这是“添加页面”中的提交代码:

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];
}
于 2012-06-25T00:23:42.080 回答
-1

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

如果您只想将文本添加到表格视图中,您可以使用 alertview。

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

首先创建一个按钮,连接您的按钮以使用文件所有者在您的 .xib 文件中执行 IBAction

-

(IBAction)add:(UIButton *)sender
{

    UIAlertView* dialog = [[UIAlertView alloc] initWithTitle:@"Enter Item Name"
                                                     message:@"  "   
                                                    delegate:self 
                                           cancelButtonTitle:@"Cancel"
                                           otherButtonTitles:@"OK", nil];

    UITextField *nameField = [[UITextField alloc] 
                              initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)];
    [nameField setBackgroundColor:[UIColor whiteColor]];
    nameField.text = @"";
    nameField.tag = 100;
    [dialog addSubview:nameField];
    [nameField release];
    [dialog show];
    [dialog release];

}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
    yourArraylist = [[NSMutableArray alloc] init];


    if([title isEqualToString:@"OK"])
    {

        UITextField* nameField = (UITextField *)[alertView viewWithTag:100];
        [yourArraylist addObject:nameField.text];

     // do additional  data source issues here 
    [self.mytableView reloadData];
}
于 2012-06-25T00:19:08.523 回答