iOS:从另一个视图向tableview添加新单元格

时间:2011-11-03 11:11:44

标签: iphone ios nsmutablearray nsarray tableview

我想知道在iOS中向tableview添加新单元格的最佳方法是什么。假设我有一个firstviewcontroller和一个secondviewcontroller。在firstviewcontroller上我有一个已经填充了一些数据的tableview,我还有一个导航栏,顶部有一个添加按钮。点击添加按钮将显示一个新视图,然后我想将数据从secondviewcontroller传递到firstviewcontroller并用它填充我的tableview。

谢谢, 萨姆

3 个答案:

答案 0 :(得分:1)

你的secondViewController应该创建一个委托协议。然后应将您的firstViewController指定为其委托。

一旦secondViewController保存数据,它就会调用firstViewController应该实现的方法

这里有一个很好的例子: How do I create delegates in Objective-C?

让你入门:secondViewController.h

@protocol secondViewControllerDelegate;

@interface secondViewController : UIViewController{
    id<secondViewControllerDelegate> __unsafe_unretained delegate;
}
@property (nonatomic, unsafe_unretained) id<secondViewControllerDelegate> delegate;
@end

@protocol secondViewControllerDelegate <NSObject>
- (void)dataSaved;
@end

答案 1 :(得分:0)

您可以使用tableView数据源添加新类。使用nesessary数据(来自两个View控制器。使用委托合作)和anu数据chaging调用[tableView setDataSource:]:

//  DataSourceAtoZ.h
#import <Foundation/Foundation.h>
#import "MallsViewController.h"

@interface DataSourceCategory : NSObject <UITableViewDataSource> {
     NSMutableArray *data;
    UITableView *tableView;
}
@property (nonatomic, retain) NSMutableArray *data;

- (id)initWithData:(NSMutableArray *)d;

@end

然后,在代码中的任何地方,组合您希望在tableView中设置的数据并设置dataSource:

NSMutableArray *dt = [[NSMutableArray alloc] init];
                for (int i = 0; i < [categories count]; i++) {
                    NSMutableArray *names = [[NSMutableArray alloc] init];
                    [names addObject:[[categories objectAtIndex:i] objectAtIndex:0]];
                    for (int j = 1; j < [[categories objectAtIndex:i] count]; j++) {
                        NSRange match = [[[categories objectAtIndex:i] objectAtIndex:j] rangeOfString:[params objectAtIndex:0]];
                        if (match.length != 0) {
                            [names addObject:[[categories objectAtIndex:i] objectAtIndex:j]];
                        }
                    }
                    [dt addObject:names];
                    [names release];
                }
                dsCategory = [[DataSourceCategory alloc] init];
                dsCategory = [dsCategory initWithData:dt];
                [dt release];

答案 2 :(得分:0)

您应该在App委托中创建数组,然后调用它们并根据需要更改它们。

MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];

一旦有了这一行,就可以连接两个类并调用委托上的任何方法,例如:

[appDelegate populateMyArray];

你没有像你描述的那样添加“新细胞”,你使用相同的细胞并用不同的数据填充它们。