我有一个tableview设置来自可变数组的数据,但我无法弄清楚如何重新加载它,或者即使它首先被加载。
当用户按下按钮时,可变数组会发生变化。当我用测试数据初始化数组时,表视图工作正常。我想我需要重新加载表,但我在cellForRowAtIndexPath中做不成功。我还试图通过.h合成tableView并重新加载从添加按钮被点击方法添加到数组后重新加载(尝试没有反映在代码中,但如果你认为我做错了继续发布正确的方式)。
没有错误,但是当我点击添加按钮时没有任何反应。
非常感谢任何帮助。
相关代码:
·H:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITextField *name;
@property (weak, nonatomic) IBOutlet UITextField *company;
- (IBAction)add:(id)sender;
**@property (nonatomic, retain) NSMutableArray *currentNames;
@property (nonatomic, retain) NSMutableArray *currentCompanies;
@property (nonatomic, retain) NSMutableArray *names;
@property (nonatomic, retain) NSMutableArray *companies;
@property (weak, nonatomic) IBOutlet UITableView *preExisting;**
@end
的.m:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
**@synthesize name, company, currentNames, currentCompanies, names, companies;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSMutableArray *currentNames = [[NSMutableArray alloc] init];
NSMutableArray *currentCompanies = [[NSMutableArray alloc] init];
NSMutableArray *names = [[NSMutableArray alloc] init];
NSMutableArray *companies = [[NSMutableArray alloc] init];
self.preExisting = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame] style:UITableViewStylePlain];**
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
this.tableView = tableView;
return [currentNames count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"SimpleTableItem";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
cell.textLabel.text = [currentNames objectAtIndex:indexPath.row];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView reloadData];
}
- (IBAction)add:(id)sender {
BOOL exists = [names containsObject:name.text];
if(exists == FALSE){
[currentNames addObject:[name text]];
[currentCompanies addObject:[company text]];
[names addObject:[name text]];
[companies addObject:[company text]];
}
else{
[currentNames addObject:[name text]];
[currentCompanies addObject:[company text]];
}
[currentNames addObject:[name text]];
**[_preExisting reloadData];**
name.text=@"";
company.text=@"";
}
@end
答案 0 :(得分:1)
TableView
使用数据源(NSArray
或NSMutableArray
s)来填充自己。它使用各种委托方法来了解如何填充它。因此,在您的情况下,您使用currentNames
NSMutableArray
的实例来执行此操作。当您操作此数组中的数据时,您希望TableView
显示现在编辑过的数组。
所以要在按钮的动作方法中完成数组编辑后重新加载表视图,你应该调用这个方法
[self.tableView reloadData]
那里。
注意: - 如果您在NSMutableArray
文件中创建了Interface
属性,那么您希望数据源数组具有范围,直到视图控制器持续为止,不要在NSMutableArray
文件中重新创建同名Implementation
的实例(不要忽略编译器警告)。
在viewDidLoad
方法中,使用
self.currentNames = [[NSMutableArray alloc] init];
虽然顺便说一下会造成内存泄漏,但要认真考虑,请在继续前进TableView
的{{3}}。