0

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

如何从视图控制器获取数据以显示在表视图控制器上?
我在做什么是行不通的。

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 持久化数据。所以我认为如果这是问题,那将解决它。在那之前,我怎样才能让它工作?

我试图用一个字符串初始化标题数组。该字符串显示。所以看起来确实是因为每次加载表视图时我都在重新初始化数组。我在哪里/应该在其他地方初始化数组?

4

2 回答 2

0

您可以使用委托:

ViewController.h(声明委托)

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

视图控制器.m

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

UITableViewController

- (void)prepareForSegue:(NSString)strToAdd {
  [self.title addObject:strToAdd];
  [self.tableView reloadData];
}
于 2012-06-04T17:41:59.170 回答
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];

}

可能对你有帮助。

于 2012-06-04T16:12:39.927 回答