从另一个UIView向TableView添加Row

时间:2012-06-04 15:58:01

标签: iphone ios5

我有一个带有保存按钮的UIViewController。当我单击它时,我将一个字符串添加到UITableViewController中的数组。我有一个segue,然后转到表视图,我希望数组中的新对象显示为表中的一行。

如何从视图控制器获取数据以显示在表视图控制器上? 我正在做的事情不起作用。

的UIViewController:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([[segue identifier] isEqualToString:@"showFindTable"])
    {
        FindTableViewController *findTableVC = [segue destinationViewController];
        findTableVC.titles addObject:titleField.text];
        [findTableVC.tableView reloadData];
    }
}

的UITableViewController:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.titles = [[NSMutableArray alloc] init];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"FindCell";
    FindTableCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell.title.text = [self.titles objectAtIndex:[indexPath row]];

    return cell;
}

在表视图控制器内部,我初始化数组。所以当我添加对象时,它只是在调用viewDidLoad时恢复为空数组?我计划最终使用Core Data持久保存数据。所以我认为如果这是问题就能解决它。在那之前,我怎么能让它发挥作用?

我尝试用一​​个字符串初始化title数组。该字符串显示。所以看起来确实如此,因为每次加载表视图时我都会重新初始化数组。我/我应该在哪里初始化阵列?

2 个答案:

答案 0 :(得分:0)

在我的项目中,我这样使用

要将数据添加到单元格的类的Crete对象,如下所示。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *CellIdentifier = @"WhatsNewCell";

WhatsNewCell *cell = (WhatsNewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//if (nil == cell)
{
    cell = [[WhatsNewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ;
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
return cell;
}

但是WhatsNewCell是 UITableViewCell 的子类 并在该类中创建方法并添加类似

 - (void)createCellLabels
{    

albumNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(15.0, 5.0, 200.0, 50.0)];
albumNameLabel.textAlignment = UITextAlignmentLeft;
albumNameLabel.textColor = [UIColor colorWithRed:0.14 green:0.29 blue:0.42 alpha:1]; 
albumNameLabel.font =  [UIFont boldSystemFontOfSize:15.0];
albumNameLabel.backgroundColor = [UIColor clearColor];
[self.contentView addSubview:albumNameLabel];

artistNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(15.0, 28.0, 200.0, 50.0)];
artistNameLabel.textAlignment = UITextAlignmentLeft;
artistNameLabel.textColor = [UIColor grayColor];
artistNameLabel.font =  [UIFont boldSystemFontOfSize:12.0];
artistNameLabel.backgroundColor = [UIColor clearColor];
[self.contentView addSubview:artistNameLabel];

genresLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(5.0, 0.0, 200.0, 25.0)];
genresLabel1.textAlignment = UITextAlignmentLeft;
genresLabel1.textColor = [UIColor colorWithRed:0.14 green:0.29 blue:0.42 alpha:1]; 
genresLabel1.font =  [UIFont boldSystemFontOfSize:15.0];
genresLabel1.backgroundColor = [UIColor clearColor];
[self.contentView addSubview:genresLabel1];

}

可能对你有所帮助。

答案 1 :(得分:0)

您可以使用委托:

ViewController.h(声明委托)

@protocol delegateName <NSObject>
- (void)prepareForSegue:(NSString)strToAdd;
@end

ViewController.m

- (void)save:(id)sender {
   [delegete prepareForSegue:titleField.text];
}

的UITableViewController

- (void)prepareForSegue:(NSString)strToAdd {
  [self.title addObject:strToAdd];
  [self.tableView reloadData];
}